プロが教える店舗&オフィスのセキュリティ対策術

EVENT
--+------------+------------+
id | start_date | end_date
--+------------+------------+
0 | 2007-06-01 | 2007-06-03 |
--+------------+------------+
1 | 2007-06-04 | 2007-04-06 |
--+------------+------------+
2 | 2007-06-02 | 2007-06-05 |

↑こんな感じでイベントを管理するテーブルがあります。
イベントの開催期間の重複を出力するSQL文を書きたいのですが、
何かいい案はありませんでしょうか???

結果的には重複し合っているレコードのidを出力させたいです。
よろしくお願いします。

A 回答 (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;
    • good
    • 0
この回答へのお礼

chukenkenkouさん本当にありがとうございます。

自分ももっともっと勉強します。

ありがとうございました。

お礼日時:2007/06/05 18:43

提示した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;
    • good
    • 1
この回答へのお礼

何度も何度も本当にありがとうございます。

早速使わせていただきますw

お礼日時:2007/06/19 10:38

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

のように結果を得ることはできるかも知れません。
どうしたいですか?
    • good
    • 0

命題が曖昧ですね。



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
という結果を出力していただけたら嬉しいです。

よろしくお願いします。

補足日時:2007/06/05 18:00
    • good
    • 1

「開催期間の重複」とは、具体的にはどういう意味でしょうか?



開始日と終了日の両方が同じイベント?
期間が1日でも重なっているイベント?

元の表のデータだけでなく、得たい結果も示せば、回答する側も適切な回答が可能です。

この回答への補足

ありがとうございます。

期間が1日でも重なっているイベントがあれば
対象のidを得たいです。

id 1のend_dateは2007-04-06ではなく2007-06-06でお願いします。

よろしくお願いします!

補足日時:2007/06/05 17:13
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す