我们经常遇到类似这样的需求,查询最近N秒、N分钟、N小时的数据及N天的数据,相关的方法和函数很多,本人最近用的MySQL数据库,也就用MySQL为例,大概介绍几种比较通用的方法。
一、查询最近N秒、N分钟、N小时、N天的数据
1. 查询最近N秒的数据
法一(推荐):
-- 查询最近300秒的数据
SELECT t.alarm_id, t.alarm_status, t.busi_type_name, t.begin_time
FROM alarm_list_info_view t
where t.begin_time between date_sub(now(),interval 300 SECOND) and now();
法二:
-- 查询最近300秒的数据
SELECT t.alarm_id, t.alarm_status, t.busi_type_name, t.begin_time
FROM alarm_list_info_view t
where TIMESTAMPDIFF(SECOND, t.begin_time, NOW()) > 0
and TIMESTAMPDIFF(SECOND, t.begin_time, NOW()) < 300;
2. 查询最近N分钟的数据
法一
-- 查询最近5分钟的数据
SELECT t.alarm_id, t.alarm_status, t.busi_type_name, t.begin_time
FROM yusys_aiops_alarm.alarm_list_info_view t where t.begin_time
between date_sub(now(), interval 5 MINUTE) and now();
法二
-- 查询最近5分钟的数据 包含当前分钟 <= 5 不包含 <5
SELECT t.alarm_id, t.alarm_status, t.busi_type_name, t.begin_time
FROM alarm_list_info_view t where
TIMESTAMPDIFF(MINUTE, t.begin_time, NOW()) > 0 and TIMESTAMPDIFF(MINUTE, t.begin_time, NOW()) <= 5;
实例(其他就不单独演示了哈):
3. 查询最近N小时的数据
法一
-- 查询最近3小时的数据
SELECT t.alarm_id, t.alarm_status, t.busi_type_name, t.begin_time
FROM yusys_aiops_alarm.alarm_list_info_view t
where t.begin_time between date_sub(now(), interval 3 HOUR) and now();
法二
-- 查询最近3小时的数据
SELECT t.alarm_id, t.alarm_status, t.busi_type_name, t.begin_time
FROM alarm_list_info_view t where
TIMESTAMPDIFF(HOUR, t.begin_time, NOW()) > 0 and TIMESTAMPDIFF(HOUR, t.begin_time, NOW()) <= 3;
4. 查询最近N天的数据
法一
-- 查询最近3天的数据
SELECT t.alarm_id, t.alarm_status, t.busi_type_name, t.begin_time
FROM yusys_aiops_alarm.alarm_list_info_view t
where t.begin_time between date_sub(now(), interval 3 DAY) and now();
法二
-- 查询最近3天的数据 包含当前天<= 3 不包含天 <3
SELECT t.alarm_id, t.alarm_status, t.busi_type_name, t.begin_time
FROM alarm_list_info_view t where
TIMESTAMPDIFF(DAY, t.begin_time, NOW()) > 0 and TIMESTAMPDIFF(DAY, t.begin_time, NOW()) <= 3;
二、介绍下上面SQL中用到的几个函数
1. 计算时间差的函数TIMESTAMPDIFF() 和 DATEDIFF()的用法
TIMESTAMPDIFF() 和 DATEDIFF()函数都是计算时间差的,具体的定义用法和区别见如下地址。
需要注意:TIMESTAMPDIFF函数第一个参数为:时间单位,第二个参数为小的时间参数,第二个参数为大的时间参数。
地址:https://blog.csdn.net/qq_36735986/article/details/120534436
2. DATE_SUB() 函数的定义和用法
MySQL DATE_SUB() 函数定义:
DATE_SUB() 函数从日期减去指定的时间间隔。
语法:
DATE_SUB(date, INTERVAL expr type)
date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。
type 参数可以是下列值:
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH