我需要为每个ID查找唯一的USER。 ID的SRC必须为“ 3”,日期必须为Null,否则,如果日期不为null,则需要具有最大日期的用户和SRC的“ 3”。我可以将每个部分分开,但是要使其在以下两种情况下都能正常工作是很困难的。表名称是MGR。谢谢。
我希望结果是:
答案 0 :(得分:0)
我认为标准的ROW_NUMBER
查询应该在这里起作用:
WITH cte AS (
SELECT t.*, ROW_NUMBER() OVER (PARTITION BY t.ID ORDER BY t.DATE DESC) rn
FROM yourTable
WHERE SRC = 3
)
SELECT ID, USER
FROM cte
WHERE rn = 1;
之所以起作用,是因为NULL
值以升序排在最后,或以降序排在第一。由于上面的行号按日期降序排列,这意味着NULL
日期(如果存在)将排在最前面,否则,较新的日期将排在最前面。
答案 1 :(得分:0)
您可以在where子句中实现过滤器,并使用相关的子查询提取最新的ID
SELECT
FROM
mytable t
WHERE
t.src = 3
AND (
t.date IS NULL
OR t.date = (
SELECT MAX(t1.date) FROM mytable t1 WHERE t1.id = t.id AND t1.src = t.src
)
)