2016-03-24 11 views
2

複雑なSQL-Insertを作成しようとしていますが、見出しに適切な流行語を見つけられません。複雑な順序付きグループカウンタを挿入する

私の問題をexpainするためにいくつかのデータをここで[OK]を:

Date  Type 
20160321 entry 
20160322 entry 
20160324 entry 
20160325 delete 
20160424 entry 
20160425 entry 
20160428 update 
20160504 update 
20160520 update 
20160520 entry 

今私は、日付の順で、「タイプ」のすべての変更により、グループを作成したい...最後に次の表になるように希望が存在します。

Date  Type Group 
20160321 entry 1 
20160322 entry 1 
20160324 entry 1 
20160325 delete 2 
20160424 entry 3 
20160425 entry 3 
20160428 update 4 
20160504 update 4 
20160520 update 4 
20160520 entry 5 

「私はLEAD、LAG、FIRST_VALUEとROW_NUMBERと、後のアップデートで...多くのことを試してみた...しかしナッシングは、このソリューションのために働く... 私の問題は、グループが上がらないということですデータそのものによって定義可能である...グループは、orde rと前の値...

私の問題を理解して助けてくれることを願っています!

+0

なぜ更新タイプが4に割り当てられましたか? – TheGameiswar

答えて

3

次のクエリを使用することができます。

SELECT [Date], [Type], 
     DENSE_RANK() OVER (ORDER BY min_Date) AS [Group] 
FROM(
    SELECT [Date], [Type], 
     MIN([Date]) OVER (PARTITION BY [Type], grp) AS min_Date 
    FROM ( 
    SELECT [Date], [Type], 
     ROW_NUMBER() OVER (ORDER BY [Date]) - 
     ROW_NUMBER() OVER (PARTITION BY [Type] ORDER BY [Date]) AS grp 
    FROM mytable) AS t) AS s 
ORDER BY [Date] 

説明:

最も内側の問合せ:

SELECT [Date], [Type], 
     ROW_NUMBER() OVER (ORDER BY [Date]) - 
     ROW_NUMBER() OVER (PARTITION BY [Type] ORDER BY [Date]) AS grp 
FROM mytable 

島々同じType値を共有する連続したレコードのを検出します。

値を簡単上 DENSE_RANKを適用することによって算出することができる

Date  Type min_Date 
============================ 
20160321 entry 20160321 
20160322 entry 20160321 
20160324 entry 20160321 
20160325 delete 20160325 
20160424 entry 20160424 
20160425 entry 20160424 
20160428 update 20160428 
20160504 update 20160428 
20160520 update 20160428 
20160520 entry 20160520 

:各Typeスライスの最小Date値を算出するように

Date  Type grp 
======================== 
20160321 entry 0 
20160322 entry 0 
20160324 entry 0 
20160325 delete 3 
20160424 entry 1 
20160425 entry 1 
20160428 update 6 
20160504 update 6 
20160520 update 6 
20160520 entry 4 

第二レベルの問合せはOVER MIN()は()を使用しmin_Dateフィールド。

+0

あなたの極端な高速、偉大な、完全な答えをありがとう!私はsqlでそれほど悪くないと思ったが、解決策を見つけることができなかった!あなたは私の人生の多くの時間を節約します。ありがとう! –

関連する問題