• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:期間の重複を調べるSQL文について・・・)

SQLでイベントの重複期間を調べる方法

このQ&Aのポイント
  • イベントの開催期間の重複を確認するためには、SQL文を使用することができます。
  • 上記のようなイベント管理テーブルにおいて、開催期間が重複しているレコードを取得するためには、start_dateとend_dateを比較する条件を追加する必要があります。
  • 重複しているレコードのidを出力させるためには、SELECT文の結果にid列を含めることが必要です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

#3で提示したような結果でいいなら、下記SQLで実現できると思います。 select x.id,y.id as 重複id from t1 as x,t1 as y where (x.sdate between y.sdate and y.edate or x.edate between y.sdate and y.edate) and x.id<>y.id order by x.id,y.id;

noname#97996
質問者

お礼

chukenkenkouさん本当にありがとうございます。 自分ももっともっと勉強します。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.5

提示したSQLに、条件の漏れがありました。 イベント開催期間が、完全に他のイベントに含まれている場合の条件が抜けていまし た。 id 開始日 終了日 1 6/5 6/10 2 6/10 6/15 3 6/15 6/20 4 1/1 12/31 上記の場合、イベント4を含んで検索できていませんでした。 カッコ内の条件に、以下を追加する必要があります。 「or x.sdate<y.sdate and x.edate>y.edate」 <訂正結果を反映したSQL> select x.id,y.id as 重複id from t1 as x,t1 as y where (x.sdate between y.sdate and y.edate or x.edate between y.sdate and y.edate or x.sdate<y.sdate and x.edate>y.edate) and x.id<>y.id order by x.id,y.id;

noname#97996
質問者

お礼

何度も何度も本当にありがとうございます。 早速使わせていただきますw

すると、全ての回答が全文表示されます。
回答No.3

id 開始日 終了日 1 6/5 6/10 2 6/10 6/15 3 6/15 6/20 といったケースの場合、 id 重複id 1 2 2 1 2 3 3 2 のように結果を得ることはできるかも知れません。 どうしたいですか?

すると、全ての回答が全文表示されます。
回答No.2

命題が曖昧ですね。 id 開始日 終了日 1 6/5 6/10 2 6/10 6/15 3 6/15 6/20 id=1とid=2は、期間に重複があります。 id=2とid=3は、期間の重複があります。 id=1とid=3には、期間の重複がありません。 上記のようなケースでは、得たい結果はどうなりますか? idを条件指定し、「そのidと期間が重なるイベントを検索する」といった検索にする必要があると思います。

noname#97996
質問者

補足

何度も適切な指示ありがとうございます。 1 2 3 という結果を出力していただけたら嬉しいです。 よろしくお願いします。

すると、全ての回答が全文表示されます。
回答No.1

「開催期間の重複」とは、具体的にはどういう意味でしょうか? 開始日と終了日の両方が同じイベント? 期間が1日でも重なっているイベント? 元の表のデータだけでなく、得たい結果も示せば、回答する側も適切な回答が可能です。

noname#97996
質問者

補足

ありがとうございます。 期間が1日でも重なっているイベントがあれば 対象のidを得たいです。 id 1のend_dateは2007-04-06ではなく2007-06-06でお願いします。 よろしくお願いします!

すると、全ての回答が全文表示されます。

専門家に質問してみよう