まず第一に、この計算の結果は正確ではありません。「過去24時間のデータを取得」したいのですが、時間を保存するのではなく、日付だけを保存します。したがって、データを取得できるのは、今日または今日と昨日のみです。
- 今日のレコードのみをプルする場合:H00:00:01にデータをプルすると、境界条件が発生する可能性があります。時間の値を保存していないため、昨日からデータが失われます。これはおそらくすべてのデータを意味します。
- 今日と昨日のレコードをプルする場合:H23:59:59にデータをプルすると、境界条件が発生する可能性があります。時間値を保存していないため、2日(-1秒)からデータを取得します。
結論として、テーブルに時間値を追加します。DATETIME
またはTIMESTAMP
データ型の1つの列が望ましい(違いは範囲内のみ)。
あなたの質問に戻ります。基本的に、あなたがしたいことは次のとおりです。
/*
select * from table
where date >= now - 1 day;
*/
計算方法はnow - 1 day
?機能DATE_SUB()
付き:
DATE_SUB(NOW(), INTERVAL 1 DAY)
あなたのコラムから日付を作る方法は?とCONCAT_WS
機能STR_TO_DATE()
:
STR_TO_DATE(CONCAT_WS('-', u.Day, u.Month, u.Year, '00', '00', '00'), '%d-%m-%Y-%H-%i-%s')
連結された文字列にはゼロがあります。これらの列をテーブルに追加するとすぐに、それらをu.Hour
、に置き換えることができます。しかし、前に述べたように、カラムで達成できる最高のパフォーマンス。u.Min
u.Sec
DATETIME
要約:
SELECT *
FROM users u
WHERE STR_TO_DATE(CONCAT_WS('-', u.Day, u.Month, u.Year, '00', '00', '00'), '%d-%m-%Y-%H-%i-%s') >= DATE_SUB(NOW(), INTERVAL 1 DAY)