我正在嘗試獲取一個 SQL Server 查詢,該查詢需要以這樣一種方式進行磁區,即按日期排序的具有相同型別值的連續行具有相同的唯一識別符號。
假設我有下表
declare @test table
(
CustomerId varchar(10),
Type int,
date datetime
)
insert into @test values ('aaaa', 1, '2015-10-24 22:52:47')
insert into @test values ('bbbb', 1, '2015-10-23 22:56:47')
insert into @test values ('cccc', 2, '2015-10-22 21:52:47')
insert into @test values ('dddd', 2, '2015-10-20 22:12:47')
insert into @test values ('aaaa', 1, '2015-10-19 20:52:47')
insert into @test values ('dddd', 2, '2015-10-18 12:52:47')
insert into @test values ('aaaa', 3, '2015-10-18 12:52:47')
我希望我的輸出列是這樣的(不需要對數字進行排序,我只需要每個組的唯一識別符號)。
0
0
1
1
2
3
4
解釋:前 2 行有UD:0因為兩者都有一個型別“1”,然后下一行有不同的型別(“2”)所以它應該是另一個識別符號,UD:1在這種情況下,下一行仍然具有相同的型別,所以UD 是相同的,然后下一個具有不同的型別“1”,因此是另一個識別符號,在這種情況下UD:2,等等。
該customerId列與查詢無關,條件應基于Type和Date列
我的當前幾乎可以做到這一點,但在某些情況下它會失敗,為具有不同型別值的行提供相同的 ID。
SELECT
ROW_NUMBER() OVER (ORDER BY date) -
ROW_NUMBER() OVER (PARTITION BY Type ORDER BY date)
FROM @TEST
uj5u.com熱心網友回復:
這是使用傳統解決方案解決的差距和島嶼問題。
例如:
select
*,
sum(inc) over(order by date desc, type) as grp
from (
select *,
case when type <> lag(type) over(order by date desc, type)
then 1 else 0 end as inc
from test
) x
order by date desc, type
結果:
CustomerId Type date inc grp
----------- ----- --------------------- ---- ---
aaaa 1 2015-10-24T22:52:47Z 0 0
bbbb 1 2015-10-23T22:56:47Z 0 0
cccc 2 2015-10-22T21:52:47Z 1 1
dddd 2 2015-10-20T22:12:47Z 0 1
aaaa 1 2015-10-19T20:52:47Z 1 2
dddd 2 2015-10-18T12:52:47Z 1 3
aaaa 3 2015-10-18T12:52:47Z 1 4
請參閱SQL Fiddle中的示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/430088.html
