2010-09-09 56 views
23

我記錄了表中的登錄。我有ID,IP,日期和時間的列。從登錄記錄中,我只想在最後一小時內提取登錄信息。MySQL:最近一小時添加的行添加

我在時間和日期功能的MySQL文檔sweaping,但我似乎無法正確地結合它們。

有人可以幫我嗎?

+1

是四個或三列,「日期和時間」的數據類型是什麼? – 2010-09-09 23:41:48

+0

現在更改了它,只有一列用於日期和時間 - 以及它的日期時間。 – 2010-09-09 23:49:37

回答

79

利用DATE_SUB()和現在的()函數:

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

希望它可以幫助你:)

+0

是的,我做了這樣的事情,只有TIMESUB(或SUBTIME?)。但是,這是否要求日期字段是日期時間類型? – 2010-09-09 23:48:37

+0

是的使用TIMESUB更合適。是的,第一個表達式必須是日期時間表達式。第二個應該是時間表達。檢查了這一點http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_subtime – SDReyes 2010-09-10 00:14:06

+1

以UTC保存數據,有必要使用UTC_TIMESTAMP()而不是NOW( )。 – 2017-05-06 16:57:01

0

沒有細節,我認爲DATE_ADD()將工作..通過增加你的where子句現在負小時

(或DATE_SUB())

2

我建議有一個datetime列,而不是日期和時間列的添加。

假設你有一個名爲LAST_LOGIN日期時間列:

SELECT id, ip_address, last_login 
FROM mytable 
WHERE last_login >= DATE_SUB(NOW(), interval 1 hour); 
+0

如果需要打印某一天的日期,該怎麼辦?我不想取前一天的日期,而只是今天的日期。你能幫我解決嗎? – Sap 2015-03-04 06:50:14

0

它可以很容易地使用

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

您還可以使用CURDATE()來完成功能

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