重複する日付間隔を効率的に結合するにはどうすればよいでしょうか?
Dec 30, 2024 pm 09:43 PM重複する日付間隔のマージ: 効率的なアプローチ
重複する日付間隔をマージするタスクは、さまざまなコンテキストで頻繁に発生します。この問題に対処する一般的なアプローチの 1 つは、重複がなくなるまで間隔を繰り返し更新することです。この方法は比較的単純ですが、より効率的な代替手段が存在するかどうかという疑問が生じます。
代替アプローチ:
重複する日付間隔をマージする代替アプローチが提案されています。関連するフォーラムのスレッド内のユーザーによるもの。このメソッドは、結合と条件付きロジックの組み合わせを利用して、目的の結果を実現します。
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) WHERE NOT EXISTS(SELECT * FROM @T s2 WHERE s1.StartDate > s2.StartDate AND s1.StartDate <= s2.EndDate) GROUP BY s1.StartDate ORDER BY s1.StartDate
説明:
このアプローチは次のように機能します:
- 最初にテーブルをそれ自体と結合して、重複する間隔のペアを識別します。
- 次に適用されます。他の間隔と重複する間隔をフィルターで除外する条件。
- 次に、他のフィルターされていない間隔と重複する間隔をすべて削除します。
- 最後に、間隔を開始日でグループ化し、計算します。それぞれの最低終了日group.
利点:
- このアプローチにより、反復的な更新の必要性が回避され、特定のシナリオではより効率的になる可能性があります。
- 入力順序に関係なく、一貫した結果が得られます。
例:
元の質問で提供された同じサンプル データを使用すると、次の結果が得られます:
StartDate | EndDate |
---|---|
2010-01-01 | 2010-06-13 |
2010-06-15 | 2010-06-25 |
2010-06-26 | 2010-08-16 |
2010-11-01 | 2010-12-31 |
結論:
提示された代替アプローチは、重複する日付間隔をマージします。結合と条件付きロジックの組み合わせを活用して目的の結果を達成し、反復アプローチに代わる実行可能な代替手段を提供します。
以上が重複する日付間隔を効率的に結合するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか?

Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし)

MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド

共通の脆弱性(SQLインジェクション、ブルートフォース攻撃)に対してMySQLを保護するにはどうすればよいですか?

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか?
