在Oracle SQL中查找唯一ID

时间:2019-01-24 20:51:56

标签: sql oracle

我需要为每个ID查找唯一的USER。 ID的SRC必须为“ 3”,日期必须为Null,否则,如果日期不为null,则需要具有最大日期的用户和SRC的“ 3”。我可以将每个部分分开,但是要使其在以下两种情况下都能正常工作是很困难的。表名称是MGR。谢谢。

我希望结果是:

  1. ID = 456和USER = PSMITH
  2. ID = 789,USER = TREFF

enter image description here

2 个答案:

答案 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;

enter image description here

Demo

之所以起作用,是因为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
        )
    )