如何选择该组的日期为null或最大日期的行



我有一个带有多个列的表,但是我会简化,只使用三个。

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为null或具有由empl_no字段分组的最大sep_dt的行的行。因此,就我的示例而言,就是第一行" IS000001"(我只希望选择返回empl_id(。说零是" 6/8/2018",然后我想返回'00418910'。

我已经尝试过,但是我知道这是错误的,因为您不能使用那样的最大值:

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中,它不起作用,因为我想要带有空值的行。我想念什么?

我认为您可以将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

db<> fiddle

上的演示

您可以在下面尝试 - 使用2个字段empl_id,empl_no

使用group by
SELECT empl_id,empl_no, max(sep_dt) as sep_dt
FROM TEMPTBL
group by empl_id,empl_no

相关内容

  • 没有找到相关文章

最新更新