oracle sql 取 group by 子句中的第一条记录

use*_*521 1 oracle

我有一个有 2 列的表。

身份证号码 Created_DT 日期

我可以在 ID 中有重复的值(并且经常这样做)。我只需要为每个 ID 获取 1 条记录,我需要 Created_DT 所以我这样做:

select ID, Created_DT from table group by ID, Created_DT
Run Code Online (Sandbox Code Playgroud)

但是,Created_DT 也有时间,对于相同的 ID,可以跨越 2 秒,使其唯一并返回 2 条记录而不是 1 条记录。这是一个很小的差异,我不关心它。如果发生这种情况,我只想得到第一个。

做任何类型的 to_char() 都不起作用,因为我想要实际时间。我在 group_by Created_DT 上尝试 to_char() 只是它没有运行。

关于我如何做到这一点的任何想法?

Bre*_*ett 5

我认为创建日期的聚合函数可以解决问题吗?

select ID, max(Created_DT) from table group by ID
Run Code Online (Sandbox Code Playgroud)


Bre*_*ett 5

我看到您已经得到了答案,但为了将来的参考,我认为这会满足您最初的要求(获取组中的第一行)

WITH grp AS 
(
    SELECT p.id, p.Created_DT, ROW_NUMBER()
    OVER(PARTITION BY p.id ORDER BY p.Created_DT DESC) AS rnk
      FROM YOUR_TABLE p
)
SELECT g.* FROM grp g WHERE g.rnk = 1
Run Code Online (Sandbox Code Playgroud)

  • 对于 User441521 来说,这当然不是更好的**解决方案**,但我认为它确实回答了他们提出的问题。以防其他人来这里寻找聚合子句无法解决的问题。 (4认同)