我在一张表中记录了登录信息,有id、ip、日期和时间这些列。现在,我想获取最近一小时内的登录记录。
我已经查阅了MySQL文档上关于时间和日期函数的内容,但是我似乎无法正确地将它们组合起来。
能有人帮我吗?
我在一张表中记录了登录信息,有id、ip、日期和时间这些列。现在,我想获取最近一小时内的登录记录。
我已经查阅了MySQL文档上关于时间和日期函数的内容,但是我似乎无法正确地将它们组合起来。
能有人帮我吗?
使用DATE_SUB()
和NOW()
函数:
select count(*) as cnt
from log
where date >= DATE_SUB(NOW(),INTERVAL 1 HOUR);
希望这能对您有所帮助 :)
如果您想将此功能实现到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')
使用以下方法可以轻松完成:
select count(*) from logins where datetime>= NOW()- INTERVAL 1 HOUR
我建议您使用一个日期时间列而不是分别使用日期和时间列。
假设您有一个名为last_login的日期时间列:
SELECT id, ip_address, last_login
FROM mytable
WHERE last_login >= DATE_SUB(NOW(), interval 1 hour);
不涉及具体细节,我认为 Date_Add() 可以解决问题。通过在 where 子句中添加 NOW 负数小时的 add,即可实现。
(或者使用 Date_Sub() )
您也可以使用CURDATE()函数
SELECT
count(*) AS TotalCount
FROM
tblName
WHERE
datetime >= DATE_SUB(CURDATE(), INTERVAL 1 HOUR)