gpt4 book ai didi

sql - 如何选择该组的日期为空或最大日期的行

转载 作者:行者123 更新时间:2023-12-02 20:00:40 26 4
gpt4 key购买 nike

我有一个包含多列的表格,但我会让它变得简单,只使用三列。

CREATE TABLE TEMPTBL(
empl_id varchar(8),
empl_no varchar(6),
sep_dt date
);

INSERT INTO TEMPTBL
VALUES
('IS000001', '112233', NULL),
('00418910', '112233', '1/1/2019');

我想要获取的是 sep_dt 为空的行或具有按 empl_no 字段分组的最大 sep_dt 的行。因此,在我的示例中,这将是第一行“IS000001”(我只希望选择返回 empl_id)。假设 Null 是“6/8/2018”,那么我想返回“00418910”。

我已经尝试过了,但我知道这是错误的,因为你不能像那样使用 max :

SELECT   empl_id
FROM TEMPTBL empl
WHERE empl_no = '112233' AND (
sep_dt IS NULL OR
MAX(sep_dt)
)

我知道它必须包含一个分组或一个连接。所以我想出了这个:

SELECT   empl_id
FROM TEMPTBL
INNER JOIN (
SELECT empl_no, max(sep_dt) as sep_dt
FROM TEMPTBL
WHERE empl_no = '112233'
GROUP BY empl_no
) emp ON TEMPTBL.empl_no = emp.empl_no AND TEMPTBL.sep_dt = emp.sep_dt

这将为我提供包含日期的行,而不是包含空值的行。因此,如果所有 sep_dt 字段都有值,它将起作用,但如果其中一个字段为 NULL,则它将不起作用,因为我想要具有 null 值的行。我想念什么?

最佳答案

我认为您可以简单地将 ROW_NUMBER 与特殊的 ORDER BY 子句一起使用:

SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (
PARTITION BY empl_no
ORDER BY CASE WHEN sep_dt IS NULL THEN 1 ELSE 2 END, sep_dt DESC
) AS rn
FROM t
) AS x
WHERE rn = 1

Demo on db<>fiddle

关于sql - 如何选择该组的日期为空或最大日期的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55953765/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com