次のクエリを使用して、現在の時刻より正確に X 日古い結果をターゲットにします。
SELECT *,
DATE_FORMAT(datetime, '%m/%d/%Y')
FROM table
WHERE datetime BETWEEN SYSDATE() - INTERVAL 30 DAY
AND SYSDATE()
ORDER BY ID DESC
問題は、ちょうど30日前の記録が存在しない場合、無関係なデータだけでなく、現在の日付のデータも返されることです。
これを行うより良い方法はありますか?
ベストアンサー1
BETWEEN
2 つの引数の間にあるすべての値 (両端の値を含む) が含まれます。つまり、BETWEEN 1 AND 4
値 1、2、3、4 が含まれます。1 と 4 だけでなく、2 と 3 だけではありません。
30 日前の 1 日の日付だけが必要な場合は、次を試してください。
SELECT *,
DATE_FORMAT(datetime, '%m/%d/%Y')
FROM table
WHERE DATE(datetime) = CURDATE() - INTERVAL 30 DAY
ORDER BY ID DESC
時刻要素のない日付を返すため、CURDATE()
の代わりにを使用します。SYSDATE()
CURDATE()