我正在努力编写一个查询,该查询将针对两个条件对记录进行排名,并返回第一个匹配的条件。
例如,这是我的数据的简化版本:
订阅编号 | 状态 | 开始日期 | 用户 |
---|---|---|---|
1个 | 取消 | 01/01/2021 | 12 |
2 | 等候接听 | 02/01/2021 | 12 |
3 | 等候接听 | 03/01/2021 | 12 |
4 | 取消 | 04/01/2021 | 15 |
5 | 积极的 | 05/01/2021 | 15 |
6 | 等候接听 | 06/01/2021 | 15 |
7 | 取消 | 07/01/2021 | 15 |
用户可以有多个订阅,我正在尝试为每个用户返回一个订阅,作为一种“最相关的订阅”。每个用户的定义如下:
IF user has any active subscriptions THEN return the most recent active subscription
ELSE IF user has any on-hold subscriptions THEN return the most recent on-hold subscription
ELSE IF user has any cancelled subscriptions THEN return the most recent cancelled subscription
所以对于以上数据我想看看
用户 | 订阅编号 | 状态 | 开始日期 |
---|---|---|---|
12 | 3 | 等候接听 | 03/01/2021 |
15 | 5 | 积极的 | 05/01/2021 |
任何帮助表示赞赏
您可以使用row_number()
:
select s.*
from (select s.*,
row_number() over (partition by user
order by (status = 'Active') desc,
(status = 'On hold') desc,
(status = 'Cancelled') desc,
start_date desc
) as seqnum
from subscriptions s
) s
where seqnum = 1;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句