mysql:分组查询每组最新的一条数据

我们经常遇到类似这样的需求,查询最近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
————————————————
版权声明:本文为CSDN博主「ce_wangyp」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36735986/article/details/120534681

posted @   vetra  阅读(1830)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2022-02-17 Django实现websocket
2022-02-17 JWT与Session方式存储ID的区别
2022-02-17 Http与Https的区别

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示