MySQL查询最近N秒、N分钟、N小时的数据及N天的数据

我们经常遇到类似这样的需求,查询最近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

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值