簡體   English   中英

sql基於多個列選擇優先級

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM