[解決済み] MySQLで日付範囲の重なりをチェックする
2023-04-25 23:33:18
質問
このテーブルは、セッション(イベント)を保存するために使用されます。
CREATE TABLE session (
id int(11) NOT NULL AUTO_INCREMENT
, start_date date
, end_date date
);
INSERT INTO session
(start_date, end_date)
VALUES
("2010-01-01", "2010-01-10")
, ("2010-01-20", "2010-01-30")
, ("2010-02-01", "2010-02-15")
;
レンジ間の競合は避けたい。
から新しいセッションを挿入する必要があるとしましょう。
2010-01-05
から
2010-01-25
.
競合するセッションを知りたいのですが。
以下は私のクエリです。
SELECT *
FROM session
WHERE "2010-01-05" BETWEEN start_date AND end_date
OR "2010-01-25" BETWEEN start_date AND end_date
OR "2010-01-05" >= start_date AND "2010-01-25" <= end_date
;
以下はその結果です。
+----+------------+------------+
| id | start_date | end_date |
+----+------------+------------+
| 1 | 2010-01-01 | 2010-01-10 |
| 2 | 2010-01-20 | 2010-01-30 |
+----+------------+------------+
もっと良い方法はないでしょうか?
どのように解決するのですか?
以前書いたカレンダーアプリで、このような問い合わせがありました。たしかこんな感じだったような気がします。
... WHERE new_start < existing_end
AND new_end > existing_start;
アップデイト これは間違いなく動作するはずです((ns, ne, es, ee) = (new_start, new_end, existing_start, existing_end)):
- ns - ne - es - ee: 重複せず、一致しない (ne < es のため)
- ns - es - ne - ee: 重なり、かつ、マッチする
- es - ns - ee - ne: オーバーラップおよびマッチング
- es - ee - ns - ne: 重複せず、マッチしない(ns > eeのため)。
- es - ns - ne - ee: 重なり、かつ、マッチする
- ns - es - ee - ne: オーバーラップおよびマッチング
ここでは フィドル
関連
-
MySQL インタビューの質問 - ハッシュインデックスを設定する方法
-
msql クエリでのエラー 'where 節' の不明な列 'yellow fruit'
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] MySQLのクエリ結果をCSV形式で出力するにはどうすればよいですか?
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
-
[解決済み] Objective-Cで、ある文字列が他の文字列を含んでいるかどうかを調べるにはどうすればよいですか?
-
[解決済み] MySQL - SELECTクエリに基づくUPDATEクエリ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLデータ型の詳細
-
MySQL サービスとデータベース管理
-
[解決済み】DynamoDB : 提供されたキー要素がスキーマと一致しません。
-
[解決済み】MySQLで「すべての派生テーブルは独自のエイリアスを持つ必要があります」というエラーは何ですか?
-
[解決済み】ValueError: 値の長さがインデックスの長さと一致しない|Pandas DataFrame.unique()
-
[解決済み】マルチパート識別子をバインドできない
-
SQL Server のトランザクションは、try キャッチに記述しなければ、中間ステートメントがエラーを報告してもコミットされます。
-
群関数解の無効な使用
-
[解決済み] なぜ SQLAlchemy の count() は生のクエリよりずっと遅いのでしょうか?
-
[解決済み] ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセス拒否 - 特権がない?