日付フィールド(schedule_date)と時間番号(0..23)を文字列として保持するvarcharフィールド(schedule time)を持つテーブルがあります。
2つのクエリがあります。
クエリ1)今後のスケジュールを返します:
a)日付>今日
のすべてb)そして日付が現在の日付と一致するが時間>現在の時間のすべて
クエリ2)1レコードを返します-最後の実行スケジュール時間
私はこの2つを組み合わせる方法を模索してきましたが、単純な結合を超えた2つの問題にどのように対処するかがわかりません。サブクエリが含まれると思いますが、ここではSQLスキルの限界に達しています。
問題1): 2番目のクエリのみに「LIMIT1」が必要です-クエリ2だけに適用するにはどうすればよいですか?
問題2): LIMIT 1が正しく機能するには、2番目のクエリにDESC順序が必要ですが、両方のクエリの結果をASC順序で組み合わせる必要があります
注:以下の現在の時刻に+1時間を追加します(ストアの日付はESTであり、サーバーはNOWのCSTを返します)
質問1:今後のスケジュールを返す
SELECT schedule_date, CONVERT(schedule_time, DECIMAL) AS schedule_time
FROM special_schedules
WHERE schedule_date > DATE(NOW())
UNION
SELECT schedule_date, CONVERT(schedule_time, DECIMAL) AS schedule_time
FROM special_schedules
WHERE schedule_date = DATE(NOW())
AND CONVERT(schedule_time, DECIMAL) > (HOUR(CURRENT_TIME()) + 1)
クエリ2:最後のターンスケジュールを返します (LIMIT 1を最後のスケジュールに配置するにはDESCオーダーが必要です)
SELECT schedule_date, CONVERT(schedule_time, DECIMAL) AS schedule_time
FROM special_schedules
WHERE schedule_date = DATE(NOW())
AND CONVERT(schedule_time, DECIMAL) < (HOUR(CURRENT_TIME()) + 1)
UNION
SELECT schedule_date, CONVERT(schedule_time, DECIMAL) AS schedule_time
FROM special_schedules
WHERE schedule_date < DATE(NOW())
ORDER BY schedule_date DESC, schedule_time DESC
LIMIT 1
編集:上記の注文を修正しました(DESCによるものである必要があります)
組み合わせる場合は、両方を組み合わせた結果をASCに並べ替える必要があります。
ORDER BY schedule_date ASC, schedule_time ASC
ありがとう!