以下のようなデータから、
category_idでグループ分けした上で、
start_timeが現在日時(2021-06-22 11:00:00)より後のレコード(id:2,3のようなレコード)があれば、それらのレコードの中で現在日時に近いもの(id: 3のようなレコード)を取得する
なければ、現在日時より前のレコードで現在日時に近いレコード(id: 6のようなレコード)を取得する。
以上のようなクエリを書きたいのですが、条件分岐を利用してどのように書けばいいかわからないです。
教えていただけると助かります。
id | start_time | end_time | category_id |
---|---|---|---|
1 | 2020-11-04 11:09:00 | 2020-11-04 11:19:00 | 1 |
2 | 2021-11-04 11:09:00 | 2021-11-04 11:19:00 | 1 |
3 | 2021-07-04 11:09:00 | 2021-07-04 11:19:00 | 1 |
4 | 2021-05-04 11:09:00 | 2021-05-04 11:19:00 | 1 |
5 | 2020-11-04 11:09:00 | 2020-11-04 11:19:00 | 2 |
6 | 2021-05-04 11:09:00 | 2021-05-04 11:19:00 | 2 |
Field | Type | Key |
---|---|---|
id | int | PRI |
start_time | datetime | |
end_time | datetime | |
category_id | int |
せいMySQL >タイトル
「せい」とは?
すみません、間違いです。
「せい」削除しました。
条件分岐って事はCASEとか使って書きたいって事ですか?
はい、caseかifで考えています。
テーブル定義追記して貰えないですか?こちらで動作確認するのに必要なので。
それぞれ1件ずつunionで取得してアプリケーション側で判断ではダメですか?
用途次第なところはあります。
いずれにしても「現在日時から最も近いレコードの取得」は必要なわけですが、自身で書けますか?
SQL側で難しそうであれば、アプリ側で処理しようとは考えております。
現在日時から最も近いというわけではなく、現在日時よりも後のものがあればそちらを優先して取得したいです。
start_timeが同じレコードはないという保証があるのでしょうか?
(unique属性など利用して担保している?)
はい、category_id間においてはuniqueです。
回答1件
あなたの回答
tips
プレビュー