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

find out the records - first two date records of each member of every year- db2udb

需要帮助 - 场景 - 我有一个 table 列的测试数据

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

这个 table 有 20k 条记录 - 从 2015 年到 2021 年 我需要找出记录 - 每年每个成员的前两个日期记录 [只有 memberid 是唯一的) 例如

member id codetype effectivedate
123 ABC 1/2/2015
123 ABC 1/2/2015
123 ABC 8/15/2015
123 EFG 9/15/2015
123 EFG 2/15/2018
345 EFG 3/14/2018
345 EFG 3/17/2018
345 ABC 9/19/2020
456 EFG 12/20/2021

结果应该如下所示

member id codetype effectivedate
123 ABC 1/2/2015
123 ABC 1/2/2015
123 ABC 2/15/2018
345 EFG 3/14/2018
345 EFG 3/17/2018
345 ABC 9/19/2020
456 EFG 12/20/2021

尝试了很多方法,但到目前为止没有成功

试试这个

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的记录。