web-dev-qa-db-ja.com

過去1時間に追加された行の取得

ログインの記録をテーブルに保存します。 id、ip、date、timeの列があります。そのログインの記録から、最後の1時間だけに行われたログインを取得します。

時間と日付の関数に関するMySQLドキュメントを一掃していますが、それらを正しく組み合わせることができないようです。

誰か助けてくれますか?

44
Michael Grons

DATE_SUB()およびNow()関数を使用します。

select count(*) as cnt
from  log
where date >= DATE_SUB(NOW(),INTERVAL 1 HOUR); 

それがあなたを助けることを願っています:)

121
SDReyes

これをcronjobに実装する場合は、開始と終了を指定する必要があります。

たとえば、午後2時、13:00:00から13:59:59までの過去1時間のデータを取得する場合、次のようにします。

dateField BETWEEN 
DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 HOUR), '%Y-%m-%d %H:00:00') 
AND 
DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 HOUR), '%Y-%m-%d %H:59:59')
4
phoenix

日付と時刻の列ではなく、日付と時刻の列を1つ持つことをお勧めします。

Last_loginというdatetime列があるとします:

SELECT id, ip_address, last_login
FROM mytable
WHERE last_login >= DATE_SUB(NOW(), interval 1 hour);
3
Paul Schreiber

それを使用して簡単に行うことができます

select count(*) from logins where datetime>= NOW()- INTERVAL 1 HOUR
2
Varun Nath

CURDATE()関数も使用できます

SELECT
    count(*) AS TotalCount
FROM
    tblName
WHERE
    datetime >= DATE_SUB(CURDATE(), INTERVAL 1 HOUR)
1
Faisal

詳細なしで、Date_Add()は機能すると思います.. where句にNOW負の時間を追加することで

(またはDate_Sub())

0
DRapp