
現在の日時を基準に下記テーブルより直近で空いている日付とその時間帯を求めるSQLを教えて下さい。
下記のjikan_tblは、未来の予定のレコードが登録されています。
1レコード目は、2013年9月27日10時から同日の10時15分までの予定のデータです。
15分間隔で予定のレコードを登録していますが、現在の日時が2013年9月27日の10時の場合、
直近で予定を入れられる時間帯を知りたいのでSQLで同日の10時45分から11時が空いていると取得できればベストです。
ちなみに同日の11時15分から11時30分と取得されてしまうのは、NGです。
jikan_tbl
date_start int(8),
time_start int(4),
date_end int(8),
time_end int(4)
jikan_tblのレコード
20130927 | 1000 | 20130927 | 1015
20130927 | 1015 | 20130927 | 1030
20130927 | 1030 | 20130927 | 1045
20130927 | 1100 | 20130927 | 1115
20130927 | 1130 | 20130927 | 1140
難しく調べても分かりません。
知恵を貸して下さい。
宜しくお願いします。
os: windows 7
eclipse: Version: 4.2.0
Build SDK: Android 4.3(API 18)
PHP 5
No.2ベストアンサー
- 回答日時:
datetimeバージョンをざっと
//元データ
create table t_jikan(start datetime,end datetime);
insert into t_jikan values('2013-09-27 10:00','2013-09-27 10:15'),('2013-09-27 10:15','2013-09-27 10:30'),('2013-09-27 10:30','2013-09-27 10:45'),('2013-09-27 11:00','2013-09-27 11:15'),('2013-09-27 11:30','2013-09-27 11:40');
//後ろ時間が空いているviewをつくっておく
create view v_jikan as
select j1.start,j1.end
from t_jikan as j1
left join t_jikan as j2
on j1.end=j2.start
where j2.start is null;
//空き時間一覧
select v1.end as start,min(v2.start) as end
from v_jikan as v1
inner join v_jikan as v2
on v1.end < v2.start
group by start;
//特定時間の直近の空き時間
select v1.end as start,min(v2.start) as end
from v_jikan as v1
inner join v_jikan as v2
on v1.end < v2.start
where v1.end>='2013-09-27 10:00'
group by start
order by start
limit 1;
ここで'2013-09-27 10:00'を
'2013-09-27 10:45'や'2013-09-27 10:50'や'2013-09-27 11:50'に
変えると状況がヒットするレコードが変わることがわかる
この回答への補足
回答ありがとうございます。
実際に実行してみました。
素晴らしいです。
こんな難しいSQLは初めてですが、自分なりに意味を調べて勉強します。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
select文の実行結果に空白行を...
-
割合(パーセント)を求めるには?
-
SQLローダーCSV取込で、囲み文...
-
Oracleで「文字が無効です」の...
-
型変換
-
単一グループのグループ関数で...
-
サブクエリを使わない方法
-
MySQLでの近似値順での値の取得...
-
ハイフンの入ったデータの並べ替え
-
【PL/SQL】FROM区に変数を使う方法
-
ファイルの漢数字の順番につい...
-
where句中のtrim関数について
-
updateで複数行更新したい
-
並べ替えについて
-
データ
-
ソート(PL/SQL)
-
固定長データのテキストファイ...
-
count関数の値をwhere句で使用...
-
大量レコードをTRUNCATEせずに...
-
MYSQLで月ごとの集計をおこない...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
select文の実行結果に空白行を...
-
24時間以内に更新されたデータ...
-
空きのID番号を取得する方法
-
任意の上位の集計を取得するには?
-
MySQLのサブクエリ
-
SQLで連続したカラムが何個ある...
-
条件付けで集計したものをUNION...
-
時間帯テーブルから直近空き時...
-
LIMIT句で少なくとも1行は選択...
-
SQLローダーCSV取込で、囲み文...
-
単一グループのグループ関数で...
-
Oracleで「文字が無効です」の...
-
テーブルの最後(最新)のレコー...
-
並べ替えについて
-
group byの並び順を変えるだけ...
-
SELECT FOR UPDATE で該当レコ...
-
データ
-
【PL/SQL】FROM区に変数を使う方法
-
SQL*Loader Append
-
トランザクションログを出力せ...
おすすめ情報