如何使用ROW_NUMBER() PARTITION BY()?

问题描述 投票:0回答:1

我将如何为此数据集实现

ROW_NUMBER() PARTITION BY()
以获得这些结果?我只是想查看一个人截至今天目前正在注册的项目。

代码:

SELECT
    PERSON_ID,
    PROGRAM_JOINED,
    EFFECTIVE DATE,
    PROGRAM_FINISHED_FLAG
    
FROM PROGRAM_DATE_TRACK

PROGRAM_DATE_TRACK

PERSON_ID 已加入计划 生效日期 PROGRAM_FINISHED_FLAG
1 芭蕾舞 2023 年 8 月 1 日 N
1 绘画 2023 年 8 月 1 日 N
1 陶瓷 2023 年 5 月 30 日
2 人物绘图 2023 年 8 月 1 日 N
2 芭蕾舞 2023 年 5 月 30 日
2 芭蕾舞 2022 年 8 月 1 日 N
3 点击 2023 年 8 月 1 日 N
3 针织 2021 年 1 月 1 日

我需要看什么:

PERSON_ID 已加入计划 生效日期 PROGRAM_FINISHED_FLAG
1 芭蕾舞 2023 年 8 月 1 日 N
1 绘画 2023 年 8 月 1 日 N
2 人物绘图 2023 年 8 月 1 日 N
3 点击 2023 年 8 月 1 日 N

我已经尝试过此操作,但其中包括已结束的计划日期。例如,第二个人于 8/1/2022 开始芭蕾舞,但于 5/30/2023 结束。

SELECT
    PERSON_ID,
    PROGRAM_JOINED,
    EFFECTIVE DATE,
    PROGRAM_FINISHED_FLAG
    ROW_NUMBER() OVER (PARTITION BY PERSON_ID, PROGRAM_JOINED  ORDER BY EFFECTIVE DATEE DESC) AS RANK
FROM PROGRAM_DATE_TRACK
WHERE PROGRAM_FINISHED_FLAG = 'N'

结果:

PERSON_ID 已加入计划 生效日期 PROGRAM_FINISHED_FLAG 排名
1 芭蕾舞 2023 年 8 月 1 日 N 1
1 绘画 2023 年 8 月 1 日 N 1
2 人物绘图 2023 年 8 月 1 日 N 1
2 芭蕾舞 2022 年 8 月 1 日 N 1
3 点击 2023 年 8 月 1 日 N 1
sql db2
1个回答
0
投票

你可以做

select *
from (
  select t.*,
    row_number() over(partition by person_id order by effective_date desc) as rn
  from PROGRAM_DATE_TRACK t
) x
where rn = 1 and program_finished_flag = 'N'


© www.soinside.com 2019 - 2024. All rights reserved.