- ベストアンサー
SQLでイベントの重複期間を調べる方法
- イベントの開催期間の重複を確認するためには、SQL文を使用することができます。
- 上記のようなイベント管理テーブルにおいて、開催期間が重複しているレコードを取得するためには、start_dateとend_dateを比較する条件を追加する必要があります。
- 重複しているレコードのidを出力させるためには、SELECT文の結果にid列を含めることが必要です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#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;
その他の回答 (4)
- chukenkenkou
- ベストアンサー率43% (833/1926)
提示した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;
お礼
何度も何度も本当にありがとうございます。 早速使わせていただきますw
- chukenkenkou
- ベストアンサー率43% (833/1926)
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 のように結果を得ることはできるかも知れません。 どうしたいですか?
- chukenkenkou
- ベストアンサー率43% (833/1926)
命題が曖昧ですね。 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と期間が重なるイベントを検索する」といった検索にする必要があると思います。
補足
何度も適切な指示ありがとうございます。 1 2 3 という結果を出力していただけたら嬉しいです。 よろしくお願いします。
- chukenkenkou
- ベストアンサー率43% (833/1926)
「開催期間の重複」とは、具体的にはどういう意味でしょうか? 開始日と終了日の両方が同じイベント? 期間が1日でも重なっているイベント? 元の表のデータだけでなく、得たい結果も示せば、回答する側も適切な回答が可能です。
補足
ありがとうございます。 期間が1日でも重なっているイベントがあれば 対象のidを得たいです。 id 1のend_dateは2007-04-06ではなく2007-06-06でお願いします。 よろしくお願いします!
お礼
chukenkenkouさん本当にありがとうございます。 自分ももっともっと勉強します。 ありがとうございました。