2017-08-02 31 views
0

我正在尝试在查询中创建自定义排名或顺序,以便按用户顺序查看按时间顺序排列的事件顺序。我试图实现的是“Desired_Rank”下的顺序,但我只能创建最后2列。任何帮助将不胜感激!SQL在查询中创建自定义排名

dense_rank() OVER(ORDER BY date ,user_id) Current_Rank_1 
dense_rank() OVER(ORDER BY user_id) Current_Rank_2 


User_ID Date  Desired_Rank Current_Rank_1 Current_Rank_2 
    a  12/23/2016  1    1     1 
    b  12/27/2016  2    2     2 
    a  2/24/2017  3    3     1 
    c  2/24/2017  4    4     3 
    d  5/3/2017  5    5     4 
    d  5/5/2017  5    6     4 
    d  5/9/2017  5    7     4 
    d  5/9/2017  5    7     4 
+0

DBMS,谢谢 – RL90

+0

对不起,微软SQL Server 2014 – RL90

回答

1

你可以用lag和一个运行总和来做到这一点。将当前行的user_id与先前的user_id进行比较,如果遇到更改,则重置该值。

select t.*,sum(col) over(order by date) as rnk 
from (select t.* 
    ,case when lag(user_id) over(order by date) = user_id then 0 else 1 end as col 
     from tbl t 
    ) t 
+0

这不适合我。感谢您的建议。 – RL90