Oracle组使用最小日期

时间:2017-02-15 14:14:13

标签: sql oracle greatest-n-per-group

我有这样的陈述:

 select REFNUMBER,
        SomeDate,
        Somecolumn1,
        Somecolumn2
 from Table

如何选择与REFNUMBER分组的最低日期相关联的行?

3 个答案:

答案 0 :(得分:2)

使用ROW_NUMBER()分析函数:

SELECT *
FROM   (
  SELECT REFNUMBER,
         SomeDate,
         Somecolumn1,
         Somecolumn2,
         ROW_NUMBER() OVER ( PARTITION BY REFNUMBER ORDER BY SomeDate ) As rn
  FROM   Table
)
WHERE  rn = 1

答案 1 :(得分:2)

使用first/last聚合函数并避免使用子查询:

select   refnumber,
         min(somedate)                                              as somedate,
         min(somecolumn1) keep (dense_rank first order by somedate) as somecolumn1,
         min(somecolumn2) keep (dense_rank first order by somedate,
                                                       somecolumn1) as somecolumn2
from     table_name
group by refnumber

答案 2 :(得分:1)

如果一个REFNUMBER有多个相同的最低日期,这将为此REFNUMBER提供所有最小日期行。 (不仅仅是一个)

    SELECT Table.* FROM Table
    INNER JOIN (SELECT REFNUMBER, MIN(SomeDate) AS mindt FROM Table GROUP BY REFNUMBER) t
    ON
    Table.REFNUMBER = t.REFNUMBER AND Table.SomeDate = t.mindt 
相关问题