我使用
case when
聚合函数内的 MAX()
表达式来获取 case when 语句的最大值。
但是我还需要过滤掉 where 子句中的最大值。我可以从 select 子句中的 case when 语句中获取最大日期,但似乎无法理解如何在 where 子句中过滤掉它。
我知道我可以做一个临时表并轻松过滤掉它,但我想挑战自己并一次完成这一切。
这是我的 SQL 语句 - 我想获取 ID 的最新状态日期,但我只想要最新状态日期 >= 2022/01/01 的那个。
我知道下面的方法不起作用,但我不确定如果不将其放入临时表中该怎么办。
SELECT
A1.ID, A1.STATUS, A1.DESCRIPTION,
MAX(CASE
WHEN A1.DESCRIPTION IS NOT NULL
AND A1.STATUS = 'C'
THEN A1.STATUS_DATE
ELSE NULL
END) OVER (PARTITION BY A1.ID) AS LATEST_STATUS_DATE,
FROM
myTable A1
WHERE
MAX(CASE
WHEN A1.DESCRIPTION IS NOT NULL
AND A1.STATUS = 'C'
THEN A1.STATUS_DATE
ELSE NULL
END) OVER (PARTITION BY A1.ID) >= '20220101'
您可以尝试
GROUP BY
和HAVING
:
SELECT A1.ID, A1.STATUS, A1.DESCRIPTION,
MAX(CASE WHEN A1.DESCRIPTION IS NOT NULL
AND A1.STATUS = 'C'
THEN A1.STATUS_DATE
ELSE NULL
END) AS LATEST_STATUS_DATE
FROM myTable A1
GROUP BY A1.ID, A1.Status, A1.Description
HAVING MAX(CASE WHEN A1.DESCRIPTION IS NOT NULL
AND A1.STATUS = 'C'
THEN A1.STATUS_DATE
ELSE NULL
END) >= '20220101'
这是否真正有效取决于数据的性质,以及
Status
和 Description
在给定的 ID
内是否在此表中保持一致。