私はテーブル(レコード)を持つレコードを持つときから項目が親項目にリンクされたときに:私は4つの主要なケースの上に表示さSQL Serverの - マージ/グループ化の連続タイムスタンプ
CHILD STARTDATE ENDDATE PARENT
207 2013-12-18 12:45:59.017 2014-01-09 18:16:01.227 NULL
207 2014-01-09 18:16:01.227 2016-03-03 09:54:28.757 NULL
207 2016-03-03 09:54:28.757 2100-01-01 00:00:00.000 NULL
10558 2016-03-03 18:10:34.877 2016-04-05 10:25:22.860 10557
10558 2016-04-05 10:25:22.860 2016-04-05 11:33:10.493 10557
10558 2016-04-05 11:33:10.493 2100-01-01 00:00:00.000 10557
10596 2016-05-15 16:55:15.970 2016-05-16 10:00:00.000 10592
10596 2016-05-16 10:00:00.000 2016-05-17 10:00:00.000 10593
10596 2016-05-17 10:00:00.000 2100-01-01 00:00:00.000 10592
10600 2012-12-18 12:45:59.017 2100-01-01 00:00:00.000 10599
:
のために同じ子の場合、同じ子の場合、同じ親の値を持つ新しいレコード(10558)
同じ子の場合、親の変更を伴う新しいレコード(10596)
同じ子、1レコードのみ(10600)。だろう
207 2013-12-18 12:45:59.017 2100-01-01 00:00:00.000 NULL
10558 2016-03-03 18:10:34.877 2100-01-01 00:00:00.000 10557
10596 2016-05-15 16:55:15.970 2100-01-01 00:00:00.000 10592
10596 2016-05-16 10:00:00.000 2016-05-17 10:00:00.000 10593
10600 2012-12-18 12:45:59.017 2100-01-01 00:00:00.000 10599
望ましい結果:
SELECT
CHILD
, MIN(STARTDATE) as STARTDATE
, MAX(ENDDATE) as ENDDATE
, PARENT
FROM RECORDS
GROUP BY CHILD, PARENT
は、アイテム10596のために、次の望まない結果につながる:子項目が使用して、古い親に戻って変更することができたよう
207 2013-12-18 12:45:59.017 2100-01-01 00:00:00.000 NULL
10558 2016-03-03 18:10:34.877 2100-01-01 00:00:00.000 10557
10596 2016-05-15 16:55:15.970 2016-05-16 10:00:00.000 10592
10596 2016-05-16 10:00:00.000 2016-05-17 10:00:00.000 10593
10596 2016-05-17 10:00:00.000 2100-01-01 00:00:00.000 10592
10600 2012-12-18 12:45:59.017 2100-01-01 00:00:00.000 10599
どのようにこれを達成するためのアイデアですか?
ここに投稿したクエリは、はるかに速く実行されます(これらのLAG関数とLEAD関数について聞いたことはありません)。私はまた、データがすでにCHILDとPARENTのチェックで注文されているので、STARTDATE節とENDDATE節を削除できると思います。(終わりの(前のレコード)とstart(現在のレコード) –
実際には、同じ親レコードと複数のレコードを持つ2つのグループが存在する場合、このクエリは機能しません - それらはすべて一緒にグループ化されます –
具体的にすることはできますか? –