找出记录-每个成员每年的前两个日期记录-db2 udb

sczxawaw  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(140)

需要帮助-场景-我有一个包含列的表testdata

memberid (varchar) ,codetype(varchar),effectivedate(datetime)

此表有20 k条记录-从2015年到2021年,我需要找出记录-每年每个成员的前两条日期记录[只有memberid是唯一的)例如。
| 成员ID|代码类型|有效日期|
| - -|- -|- -|
| 一百二十三|ABC公司|2015年1月2日|
| 一百二十三|ABC公司|2015年1月2日|
| 一百二十三|ABC公司|2015年8月15日|
| 一百二十三|无网格|2015年9月15日|
| 一百二十三|无网格|2018年2月15日|
| 三百四十五|无网格|2018年3月14日|
| 三百四十五|无网格|2018年3月17日|
| 三百四十五|ABC公司|2020年9月19日|
| 四百五十六人|无网格|2021年12月20日|
结果应如下所示
| 成员ID|代码类型|有效日期|
| - -|- -|- -|
| 一百二十三|ABC公司|2015年1月2日|
| 一百二十三|ABC公司|2015年1月2日|
| 一百二十三|ABC公司|2018年2月15日|
| 三百四十五|无网格|2018年3月14日|
| 三百四十五|无网格|2018年3月17日|
| 三百四十五|ABC公司|2020年9月19日|
| 四百五十六人|无网格|2021年12月20日|
我试了很多方法,但至今没有成功

pepwfjgg

pepwfjgg1#

试试这个

with u as
(select memberid, codetype, effectivedate,
    row_number() over(partition by memberid, year(effectivedate) order by 
memberid) as rownum
from testdata)
(select memberid, codetype, effectivedate from u
where rownum <= 2)

基本上,您可以获得按memberid和记录年份划分的每个记录的行号,然后只保留rownum为1或2的记录。

相关问题