首页 > 解决方案 > Oracle SQL:接收具有最小日期的分组外键的 ID

问题描述

我有一张桌子。

我需要具有最小修改日期的每个投标的 ID

ID 出价 修改的
1 1 01.01.2020
2 1 01.07.2020
3 2 04.08.2020
4 2 04.06.2020
5 2 01.07.2020
6 2 01.10.2020
7 3 01.09.2020

期望的输出:

ID 出价 修改的
1 1 01.01.2020
4 2 04.06.2020
7 3 01.09.2020

到目前为止,我可以获得具有最小修改日期的投标列表,但不是其中的 ID:

select BID, min(MODIFIED) from MY_TABLE group by BID

但是,我怎样才能收到 ID?

标签: sqloracle

解决方案


Oracle 有一个“第一个”聚合函数,它使用以下keep语法:

select BID, min(MODIFIED),
       min(id) keep (dense_rank first over order by modified) as id
from MY_TABLE
group by BID;

一个常见的替代方法是使用窗口函数:

select t.*
from (select t.*,
             row_number() over (partition by bid order by modified asc) as seqnum
      from my_table t
     ) t
where seqnum = 1;

推荐阅读