Oracle 组使用最小日期
Oracle group using min date
我有这样的声明:
select REFNUMBER,
SomeDate,
Somecolumn1,
Somecolumn2
from Table
如何 select 与按 REFNUMBER 分组的最低日期关联的行?
使用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
使用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
如果一个 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
我有这样的声明:
select REFNUMBER,
SomeDate,
Somecolumn1,
Somecolumn2
from Table
如何 select 与按 REFNUMBER 分组的最低日期关联的行?
使用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
使用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
如果一个 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