【问题标题】:find out the records - first two date records of each member of every year- db2udb找出记录 - 每年每个成员的前两个日期记录 - db2udb
【发布时间】:2022-01-19 18:15:06
【问题描述】:

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

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

此表有 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

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

【问题讨论】:

    标签: sql db2


    【解决方案1】:

    试试这个

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

    【讨论】:

    • 完美,非常感谢.. 我对您的查询所做的唯一更改是 -- 下面是所有代码,这就是我想要的。再次感谢 - 用你作为(选择成员 ID,代码类型,有效日期,row_number()超过(成员 ID 分区,年(有效日期)按成员 ID 排序,代码类型,有效日期)作为来自测试数据的行号)(从你那里选择成员 ID,代码类型,有效日期行数
    • 很高兴它对你有用,伙计^^
    猜你喜欢
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多