我正在处理 SQL Server 2008 的查询,该查询需要以考虑表中行的连续性质的方式进行分区,这意味着它没有“内存”并在分区的连续性发生故障时重新开始行编号。
为了显示:
declare @test table
(
CustomerId varchar(10),
ItemId varchar(10),
PlatformName varchar(10),
date datetime
)
insert into @test values ('aaaa', 'x', 'mobile','2015-10-24 22:52:47')
insert into @test values ('aaaa', 'x', 'mobile','2015-10-23 22:56:47')
insert into @test values ('aaaa', 'k', 'mobile','2015-10-22 21:52:47')
insert into @test values ('aaaa', 'k', 'tablet','2015-10-20 22:12:47')
insert into @test values ('aaaa', 'x', 'mobile','2015-10-19 20:52:47')
insert into @test values ('aaaa', 'k', 'tablet','2015-10-18 12:52:47')
insert into @test values ('aaaa', 'k', 'tablet','2015-10-16 12:52:47')
SELECT
t.*,
ROW_NUMBER() OVER (PARTITION BY t.CustomerId,t.ItemId,t.PlatformName ORDER BY t.Date DESC) as rowNo
FROM @test t
ORDER BY t.Date DESC
以下查询返回:rowNo
1
2
1
1
3
2
3
而不是所需的:
1
2
1
1
1
1
2
在第 5 行和第 6 行的情况下,它应该重新开始计数,因为当您考虑连续性将其与初始分区分开时,它是一个新分区。
我还需要根据行编号对行进行排名,如下所示:
1
1
2
3
4
5
6
7
7