"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
これは(new_period = 1
でマーク)新しいperidあるので、period_id_group
2(この行のID)であるrow_nr = 2
について0
あります。それは連続した範囲の一部(contiguous = 1
ので)ですが、それはnew_period(new_period = 0
)、そのperiod_id_group
がある(前の行から値を継承する必要がありませんので、範囲の開始ないのでrow_nr = 3
について
連続した範囲の開始) - この場合はperiod_id_group = 2
もあります。
私は複数のバージョンを試しましたが、LAG()
を使用できないため、SQL Server 2008R2の優れたソリューションを手に入れることができませんでした。私が持っているもの
は、これまでのところ、恥ずべきである:
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最新の質問 –