鉴于此数据
Type Time Outcome Wanted Result
1 8:00 1 1
1 9:00 1 1
1 10:00 1 1
0 11:00 2 2
0 12:00 2 2
0 13:00 2 2
1 14:00 1 3
1 15:00 1 3
0 16:00 2 4
1 17:00 1 5
0 18:00 2 6
1 19:00 1 7
第三列是我使用以下sql查询的当前结果:
SELECT Type, Time, DENSE_RANK() OVER (ORDER BY Type) as Outcome
FROM Tbl
我需要使用dense_rank来保持时间排序,同时按类型对数据进行排名。第四列是想要的结果。
我正在使用SQL Server 2008
答案 0 :(得分:1)
这很棘手。您可以使用行号的不同来执行此操作。这个方法起初有点难以理解,因此我建议您运行子查询以了解发生的情况。当你看到结果时,你会很快“得到它”:
select t.*,
dense_rank() over (order by mintime) as desired_column
from (select t.*,
min(time) over (partition by id, seqnum_t - seqnum_it) as mintime
from (select t.*,
row_number() over (order by time) as seqnum_t,
row_number() over (partition by id order by time) as seqnum_it
from tbl t
) t
) t;