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の中にあるので無視
No.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;
こんな感じでどうでしょうか。
大変申し訳ありませんでした。 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 様 ありがとうございました。
流した結果、正確に出力できました。
勉強が足りないと,痛感している次第です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Oracleのビュー作成時に「指定...
-
ORACLEで一番最初の結果だけを...
-
ある値以上の空き番の最小値を...
-
DB2でREPLACEによる文字列の置換
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
Oracle 2つのDate型の値の差を...
-
エクセルVBAで5行目からオート...
-
Accessでテーブルの値をテキス...
-
ACCESSで400以上のフィールドが...
-
Accessで数値型にNULLをInsert...
-
Accessのフィールド数が255しか...
-
Access テキスト型に対する指定...
-
ORACLEでLONG項目からCHAR項目...
-
ACCESSで和暦を西暦に・・・
-
他テーブルで一致する列から名...
-
Access IF文でテーブルに存在し...
-
作番ってどういう意味でしょうか?
-
Accessでテーブル名やクエリ名...
-
アクセス エラーを数値「0」に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Oracleのビュー作成時に「指定...
-
ROWNUMについて
-
ORACLEで一番最初の結果だけを...
-
Oracle SQLにて固定長でデータ...
-
抽出結果を1件ずつ次の抽出条件...
-
ある値以上の空き番の最小値を...
-
DB2でREPLACEによる文字列の置換
-
distinct で抽出したレコード件数
-
WITH句で複数テーブルを定義す...
-
P/L SQLで値が更新されない。
-
sqlplusで日本語入力
-
時間の重複を加味した連続時間S...
-
動的SQLでのDECODE
-
PL/SQL 複数件同じ値で更新す...
-
group by でselect
-
SQL文についての質問
-
ACCESS クエリーから件数取得
-
エクセルVBAで5行目からオート...
-
「直需」の意味を教えてください
-
Accessでテーブル名やクエリ名...
おすすめ情報