我想在下面的數據集上寫一個查詢來添加一個新的列,它有某種「period_id_group」。查詢以確定連續的範圍
contiguous new_period row_nr new_period_starting_id
0 0 1 0
1 1 2 2
1 0 3 0
1 0 4 0
1 1 5 5
1 0 6 0
我想要得到的是:
contiguous new_period row_nr new_period_starting_id period_id_group
0 0 1 0 0
1 1 2 2 2
1 0 3 0 2
1 0 4 0 2
1 1 5 5 5
1 0 6 0 5
的邏輯是,在new_period_starting_id
各爲0值,它必須得到上面的行>0
值。
所以,row_nr = 1
因爲沒有排在它之前,period_id_group
爲0
對於row_nr = 2
,因爲這是一個新的perid(由new_period = 1
標記)時,period_id_group
爲2(此行的ID)。
對於row_nr = 3
因爲它是一個連續範圍的一部分(因爲contiguous = 1
),而不是範圍的開始,因爲它不是一個NEW_PERIOD(new_period = 0
),其period_id_group
應繼承上一行的值(也就是連續範圍的開始) - 在這種情況下也是period_id_group = 2
。
我已經嘗試了多個版本,但無法獲得SQL Server 2008R2的良好解決方案,因爲我無法使用LAG()
。
我有什麼,到目前爲止,是可恥的:
select *
from #temp2 t1
left join (select distinct new_period_starting_id from #temp2) t2
on t1.new_period_starting_id >= t2.new_period_starting_id
where 1 = case
when contiguous = 0
then 1
when contiguous = 1 and t2.new_period_starting_id > 0
then 1
else 1
end
order by t1.rn
樣本數據腳本
declare @tmp2 table (contiguous int
, new_period int
, row_nr int
, new_period_starting_id int);
insert into @tmp2 values (0, 0, 1, 0)
, (1, 1, 2, 2)
, (1, 0, 3, 0)
, (1, 0, 4, 0)
, (1, 1, 5, 5)
, (1, 0, 6, 0);
任何幫助表示讚賞。
@yatinparab更新了我的問題 –