アプリ版:「スタンプのみでお礼する」機能のリリースについて

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の中にあるので無視

A 回答 (1件)

記載のデータって正しいですか?


このデータだと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;

こんな感じでどうでしょうか。
    • good
    • 0
この回答へのお礼

大変申し訳ありませんでした。  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

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

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