首页 > 解决方案 > 在共享 FK 的一组数据中选择最新的行集

问题描述

我有一组具有以下布局的数据:

SPECNUMBER | CHANGEDATE | CHANGE
1          | 01/01/2019 | zzz
1          | 01/01/2019 | xxx
1          | 01/01/2019 | vvv
1          | 30/07/2019 | yyy
1          | 30/07/2019 | uuu
1          | 30/07/2019 | www
2          | 01/01/2019 | zzz
2          | 01/01/2019 | xxx
2          | 01/01/2019 | vvv
2          | 22/07/2019 | yyy
2          | 22/07/2019 | uuu
2          | 22/07/2019 | www`

我想只返回最新的集合,因此只返回上面示例中每个规范编号的底部 3 行,因此生成的数据集如下所示:

SPECNUMBER | CHANGEDATE | CHANGE
1          | 30/07/2019 | yyy
1          | 30/07/2019 | uuu
1          | 30/07/2019 | www
2          | 22/07/2019 | yyy
2          | 22/07/2019 | uuu
2          | 22/07/2019 | www`

我试图使用 MAX(changedate) 但是我的实现只返回数据集中最大的changeate。

标签: sqldatabaseoracleoracle-sqldeveloper

解决方案


你想要rank()

select t.*
from (select t.*, rank() over (partition by SPECNUMBER order by CHANGEDATE desc) as seq
      from table t
     ) t
where seq = 1;

推荐阅读