特定の期間の売上を表す 10 万行のテーブルがあります。通常、生理は少なくとも数時間続きますが、時折、わずか数分の生理になります。これらの小さな期間は下流のレポートを台無しにするので、前の期間とマージしたいと思います。30 分以下の期間は前の期間とマージされ、販売データが期間全体で合計されます。長い期間の間にゼロ、1 つ、または複数の後続の短い期間がある場合があります。データに時間のギャップはありません。1 つの期間の開始は、前の期間の終了と常に同じです。
このマージを実行するための適切なセットベースの方法 (カーソルなし!) は何ですか?
既存のデータ (簡略化) は次のようになります。
UnitsSold Start End
---------------------------------------------------
10 06-12-2013 08:03 06-12-2013 12:07
12 06-12-2013 12:07 06-12-2013 16:05
1 06-12-2013 16:05 06-12-2013 16:09
1 06-12-2013 16:09 06-12-2013 16:13
7 06-12-2013 16:13 06-12-2013 20:10
望ましい出力は次のようになります。
UnitsSold Start End
---------------------------------------------------
10 06-12-2013 08:03 06-12-2013 12:07
14 06-12-2013 12:07 06-12-2013 16:13
7 06-12-2013 16:13 06-12-2013 20:10
残念ながら、私たちはまだ SQL Server 2008 R2 を使用しているため、SQL Server 2012 の優れた新しいウィンドウ関数を利用することはできません。これにより、この問題を効率的に解決しやすくなる可能性があります。
同様の問題について、SQL で隣接する行をマージするのに良い議論がありますか? . 特に PIVOT/UNPIVOT ソリューションが気に入っていますが、それを自分の問題に適応させる方法に困惑しています。