【发布时间】:2021-07-27 04:30:16
【问题描述】:
我有如下数据 (dt):
group_id customer_id tag score phase
1 a l1 0 2020
1 b l2 0 2021
2 a l4 1 2019
2 e l3 1 2019
2 d l3 1 2018
3 q 1 2020
3 w 1 2019
3 z l5 1 2019
3 x l5 1 2019
3 c l6 1 2019
我想要
- 在一个组中排名,首先按分数(分数越低越好)
- 如果 2 个客户在同一组中且得分相同且标签相同(非空),则连接 customer_id
- 我需要按阶段对它们进行排名(首选较旧的阶段)以生成最终列表。
所以,期望的输出是:
group_id customer_id tag score phase rank
1 a l1 0 2020 1
1 b l2 0 2021 2
2 a l4 1 2019 2
2 e,d l3 1 2019, 2018 1
3 q 1 2020 2
3 w 1 2019 1
3 z,x l5 1 2019, 2019 1
3 c l6 1 2019 1
我已经编写了以下查询,但我不确定如何合并检查标签中是否有 2 个客户的条件,并继续添加相位比较条件。
SELECT group_id, customer_id, tag, score, phase,
RANK() OVER (PARTITION BY group_id ORDER BY score) AS temp_rank
FROM dt
【问题讨论】:
-
连接 e 和 d,因为它们在同一个组中并且具有相同的标签。改错了