59

我在表中保留了登录记录。我有 id、ip、日期和时间的列。从该登录记录中,我想获取仅在过去一小时内进行的登录。

我正在浏览有关时间和日期函数的 MySQL 文档,但我似乎无法正确组合它们。

有人可以帮助我吗?

4

6 回答 6

167

使用 DATE_SUB() 和 Now() 函数:

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

希望它可以帮助你:)

于 2010-09-09T23:43:12.893 回答
11

如果要将其实现到 cronjob 中,则需要指定开始和结束。

例如,在下午 2 点,如果您想获取过去一小时从 13:00:00 到 13:59:59 的数据,请执行以下操作:

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')
于 2018-06-08T20:13:42.090 回答
6

它可以很容易地使用

select count(*) from logins where datetime>= NOW()- INTERVAL 1 HOUR
于 2013-12-22T12:31:01.717 回答
4

我建议使用一个日期时间列而不是日期和时间列。

假设您有一个名为 last_login 的日期时间列:

SELECT id, ip_address, last_login
FROM mytable
WHERE last_login >= DATE_SUB(NOW(), interval 1 hour);
于 2010-09-09T23:48:19.403 回答
1

您还可以使用 CURDATE() 函数

SELECT
    count(*) AS TotalCount
FROM
    tblName
WHERE
    datetime >= DATE_SUB(CURDATE(), INTERVAL 1 HOUR)
于 2016-08-02T12:07:30.260 回答
0

如果没有具体细节,我认为 Date_Add() 会起作用..通过在 where 子句中添加 NOW 负小时数

(或 Date_Sub() )

于 2010-09-09T23:43:41.153 回答