我将如何为此数据集实现
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 |
你可以做
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'