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

时间:2013-12-18 22:44:21

标签: oracle

我有一个有2列的表。

身份证号码 Created_DT日期

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

select ID, Created_DT from table group by ID, Created_DT

然而,Created_DT也有时间,同一个ID可以跨越2秒,使其独一无二,返回2个记录而不是1.这是一个很小的差异,我不关心它。如果发生这种情况,我希望得到第一个。

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

关于如何实现这一目标的任何想法?

2 个答案:

答案 0 :(得分:4)

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

select ID, max(Created_DT) from table group by ID

答案 1 :(得分:4)

我知道你已经得到了答案,但为了将来的参考,我认为这会做你最初要求的(获得小组中的第一行)

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