私はSQLに慣れていないので、私はこれからできることを学びたいと思っています。おかげSQL Server 2014オーバーラップする日付範囲をマージする
私はこのように見ているのSQL Server 2014データベース内200.000行を持つテーブルがあります:あなたはそこに各契約のために複数のオーバーラップすることができ、私は希望持って見ることができるように
CREATE TABLE DateRanges
(
Contract VARCHAR(8),
Sector VARCHAR(8),
StartDate DATE,
EndDate DATE
);
INSERT INTO DateRanges (Contract, Sector, StartDate, Enddate)
SELECT '111', '999', '01-01-2014', '03-31-2014'
union
SELECT '111', '999', '04-01-2014', '06-30-2014'
union
SELECT '111', '999', '07-01-2014', '09-30-2014'
union
SELECT '111', '999', '10-01-2014', '12-31-2014'
union
SELECT '111', '888', '08-01-2014', '08-31-2014'
union
SELECT '111', '777', '08-15-2014', '08-31-2014'
union
SELECT '222', '999', '01-01-2014', '03-31-2014'
union
SELECT '222', '999', '04-01-2014', '06-30-2014'
union
SELECT '222', '999', '07-01-2014', '09-30-2014'
union
SELECT '222', '999', '10-01-2014', '12-31-2014'
union
SELECT '222', '666', '11-01-2014', '11-30-2014'
UNION
SELECT '222', '555', '11-15-2014', '11-30-2014';
です私はこれを行うことができると私は、このサイトで見てきた例は非常に私の問題に適合しない方法を見つけ出すことはできません。この
Contract Sector StartDate EndDate
---------------------------------------------
111 999 01-01-2014 07-31-2014
111 888 08-01-2014 08-14-2014
111 777 08-15-2014 08-31-2014
111 999 09-01-2014 12-31-2014
222 999 01-01-2014 10-31-2014
222 666 11-01-2014 11-14-2014
222 555 11-15-2014 11-30-2014
222 999 12-01-2014 12-31-2014
ようになります。
は、この答えは、いくつかの異なる技術を利用し、あなたの種類の助けと支援
終了日'07 -31-2014' どのように計算されますか?あなたのデータにはありません。 –
その日付はデータにありません。別のセクターの新しい日付範囲が始まる前の最後の日付として計算されます –
同様の質問が以前に何度も尋ねられ、何度も回答されています。 https://stackoverflow.com/questions/2561130/merge-overlapping-date-intervals解決方法の詳細については、この記事をお試しください:https://www.experts-exchange.com/articles/ 3952/ranges-gap-overlaps-for-number-and-date-ranges.html – Alex