[英]sql select priority based on multiple columns
這是一些示例數據。 我正在嘗試為最近活動日期的每個UserID獲取一條記錄。 如果用戶在給定日期觀看了多部電影,則應根據與電影名稱相關的優先級選擇記錄
UserID MovieName ActivityDate
1 MOV1 2015-02-12
2 MOV2 2015-04-22
1 MOV3 2015-03-16
3 MOV1 2015-06-23
2 MOV5 2016-01-01
2 MOVH 2016-01-01
與電影名稱關聯的優先級-
MOV1 > MOV2 > MOV3 > MOV5 > MOVH
預期結果 :
UserID MovieName ActivityDate
1 MOV3 2015-03-16
2 MOV5 2016-01-01
3 MOV1 2015-06-23
我已經嘗試了GROUP BY和CASE的組合,但是我敢肯定會有更好的方法。 任何幫助表示贊賞。
select *
from (
select *
, row_number() OVER (partition by id order by MovieName desc, ActivityDate desc) as rnk
from movies) m
where m.rnk = 1
正確的答案是row_number()
,但是您需要注意以下order by
:
select m.*
from (select m.*,
row_number() over (partition by UserId
order by ActivityDate desc,
(case MovieName
when 'MOV1' then 1
when 'MOV2' then 2
when 'MOV3' then 3
when 'MOV5' then 4
when 'MOVH' then 5
else 999
end)
) as seqnum
from movies m
) m
where seqnum = 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.