- ベストアンサー
時間帯テーブルから直近空き時間取得
- 現在の日時を基準に時間帯テーブルから直近で空いている日付とその時間帯を取得するSQLを教えてください。
- jikan_tblというテーブルには未来の予定のレコードが登録されています。15分間隔で予定のレコードを登録していますが、現在の日時を基準に直近で予定を入れられる時間帯を取得するためのSQLを教えてください。
- 例えば、現在の日時が2013年9月27日の10時の場合、同日の10時45分から11時が空いているという情報を取得するSQLを教えてください。
- みんなの回答 (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'に 変えると状況がヒットするレコードが変わることがわかる
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
intをつかっている限り処理が複雑になるのでかなり難しいと思います startとendをそれぞれdatetimeにしてはいけないの?
補足
回答ありがとうございます。 解決方法があれば int型でなくdatetimeに変えようと思います。 datetimeにする場合はどのようなSQL文になるのですか?
補足
回答ありがとうございます。 実際に実行してみました。 素晴らしいです。 こんな難しいSQLは初めてですが、自分なりに意味を調べて勉強します。 本当にありがとうございました。