我有这样的陈述:
select REFNUMBER,
SomeDate,
Somecolumn1,
Somecolumn2
from Table
如何选择与REFNUMBER分组的最低日期相关联的行?
答案 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