こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

時間の重複を加味した連続時間SQL文

EVENT
--+-------------------------+----------------+
id| EVT| start_date | end_date
--+-------------------------+-----------------+
0 |AAAA| 2013-06-01 10:00 | 2013-06-01 14:00|
--+-------------------------+-----------------+
1 |BBBB| 2013-06-01 12:00 | 2013-04-01 18:00|
--+-------------------------+-----------------+
2 |CCCC| 2013-06-02 10:00 | 2013-06-05 12:00|
--+-------------------------+-----------------+
3 |DDDD| 2013-06-02 13:00 | 2013-06-05 18:00|
--+-------------------------+-----------------+
4 |EEEE| 2013-06-02 14:30 | 2013-06-05 17:00|



↑こんな感じでイベントを管理するテーブルがあります。
イベントの開催時間の重複を加味して何らかのイベントのある
連続した時間帯のみ取り出すSQLを書きたいのですが、
いい案はありますでしょうか?

結果的には以下の様な情報が取り出したいです。

2013-06-01 10:00 - 18:00
2013-06-02 10:00 - 12:00
2013-06-02 13:00 - 18:00

ID 0と1は連続してるので 10:00 - 18:00
ID 2はどれとも連続してないので 10:00 - 12:00
ID 4はID3の中にあるので無視

投稿日時 - 2013-09-24 15:59:00

QNo.8277828

困ってます

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

記載のデータって正しいですか?
このデータだとID:2~4が連続することになると思うのですが。

正しいデータが不明なので、期待どおりの結果が取れるか分かりませんが、

select min(START_DATE) START_DATE, max(END_DATE) END_DATE
from(
select ID, START_DATE, END_DATE, sum(TERM_START) over(order by START_DATE, END_DATE) TERM_ID
from (
select ID, START_DATE, END_DATE, case when START_DATE >= LAG(END_DATE, 1) OVER(ORDER BY START_DATE, END_DATE) THEN 1 else 0 end TERM_START
from EVENT
)
)
group by TERM_ID
order by START_DATE, END_DATE;

こんな感じでどうでしょうか。

投稿日時 - 2013-09-24 18:34:11

お礼

大変申し訳ありませんでした。  m(_ _)m

確かにデータが間違いでした。
申し訳ございません。


EVENT
--+-------------------------+----------------+
id| EVT| start_date      | end_date
--+-------------------------+-----------------+
0 |AAAA| 2013-06-01 10:00 | 2013-06-01 14:00|
--+-------------------------+-----------------+
1 |BBBB| 2013-06-01 12:00 | 2013-04-01 18:00|
--+-------------------------+-----------------+
2 |CCCC| 2013-06-02 10:00 | 2013-06-02 12:00|
--+-------------------------+-----------------+
3 |DDDD| 2013-06-02 13:00 | 2013-06-02 18:00|
--+-------------------------+-----------------+
4 |EEEE| 2013-06-02 14:30 | 2013-06-02 17:00|
--+-------------------------+-----------------+

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

流した結果、正確に出力できました。
勉強が足りないと,痛感している次第です。

投稿日時 - 2013-09-26 18:14:24

このQ&Aは役に立ちましたか?

13人が「このQ&Aが役に立った」と投票しています

回答(1)