ホームページ > データベース > mysql チュートリアル > 重複する日付間隔を効率的に結合するにはどうすればよいですか?

重複する日付間隔を効率的に結合するにはどうすればよいですか?

DDD
リリース: 2024-12-30 06:56:10
オリジナル
1009 人が閲覧しました

How to Efficiently Merge Overlapping Date Intervals?

重複する日付間隔のマージ (改善されたソリューション)

重複する日付間隔のマージは、データ処理における一般的なタスクです。提供されるソリューションはシンプルですが、最も効率的または包括的ではない可能性があります。潜在的なエッジケースに対処する改善されたソリューションは次のとおりです。

-- 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート