重複する日付間隔のマージ (改善されたソリューション)
重複する日付間隔のマージは、データ処理における一般的なタスクです。提供されるソリューションはシンプルですが、最も効率的または包括的ではない可能性があります。潜在的なエッジケースに対処する改善されたソリューションは次のとおりです。
-- Retrieve the overlapping ranges SELECT s1.StartDate, MIN(t1.EndDate) AS EndDate FROM @T s1 INNER JOIN @T t1 ON s1.StartDate <= t1.EndDate AND NOT EXISTS(SELECT * FROM @T t2 WHERE t1.EndDate >= t2.StartDate AND t1.EndDate < t2.EndDate) GROUP BY s1.StartDate -- Exclude subintervals EXCEPT -- Find overlapping intervals with extended end dates SELECT s1.StartDate, MAX(t1.EndDate) AS EndDate FROM @T s1 INNER JOIN @T t1 ON s1.StartDate > t1.StartDate AND s1.StartDate <= t1.EndDate GROUP BY s1.StartDate
このクエリでは、重複が元の範囲を超えて広がる可能性があるケースが考慮されています。 EXCEPT 句はこれらの拡張範囲をフィルタリングして除外し、より正確で完全なマージされた間隔セットを生成します。
出力:
StartDate | EndDate 2010-01-01 | 2010-06-13 2010-06-15 | 2010-08-16 2010-11-01 | 2010-12-31
以上が重複する日付間隔を効率的に結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。