首页 > 数据库 >mysql:分组查询每组最新的一条数据

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

时间:2023-02-17 14:59:21浏览次数:49  
标签:begin mysql alarm 每组 查询 TIMESTAMPDIFF 分组 time now

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

标签:begin,mysql,alarm,每组,查询,TIMESTAMPDIFF,分组,time,now
From: https://www.cnblogs.com/vetra/p/17130067.html

相关文章

  • 故障案例:MySQL唯一索引有重复值,官方却说This is not a bug
    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:飞鱼过天文章来源:GreatSQL社区原创......
  • 【MySQL-视图/存储过程/存储函数/触发器】
    零、本文纲要一、视图二、存储过程三、存储函数四、触发器tips:Ctrl+F快速定位到所需内容阅读吧。一、视图0、表&数据准备--新建表格createtabletb_test(idint......
  • 【MySQL-SQL优化:主键,order by,group by,limit,count,update】
    零、本文纲要一、插入数据二、主键优化三、orderby优化四、groupby优化五、limit优化六、count优化七、update优化update优化tips:Ctrl+F快速定位到所需内容阅读吧。一、......
  • MySQL数据库的几种登录方式
    1234567891011前提:连接进入mysql数据库本机安装的myslq基础信息:host="localhost",数据库主机地址:127.0.0.1port=3306,端口号user="root",myslql数据库......
  • mysql 两表,两个update_time排序问题
    当有2表要联表查询时,各有1个update_time。大于某个时间开始查询,查询更新的数据,根据update_time排序(两张表有可能之更新一张表而已)。 1.工单表CREATETABLE`shop_work......
  • 银河麒麟系统安装mysql数据库
    1.1 准备材料mysql-5.7.28-linux-glibc2.12-x86_64.tar.gzMySQL5.7下载地址https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz......
  • Mysql中的--single-transaction会锁表吗
    当时用mysqldump配置主从的时候,要设置--single-transaction,这个参数将保证备份的数据库处于一致的状态一般的备份语句如下:mysqldump-uroot-S/data/3306/data/mysql.sock......
  • mysql B+ 树与 Buffer Pool
    转自 https://lvwenhan.com/tech-epic/506.html内存缓存BufferPoolBufferPool是在MySQL启动的时候,向操作系统申请的一片连续的内存空间,默认为128MB,强烈建议任何......
  • MYSQL占用内存过高问题的解决结果记录
    问题:发现docker容器mysql的内存使用高,达到9个G快满了。开始按网上资料,查了以下二个方面,结果不是这二方面的问题,这里不再详述:1)连接池占用内存情况2)会话占用内存情况最......
  • 利用sshfs快速重做mysql主从
    先清空slavedata目录master:mkdir/tmp/data;sshfs-p22-oallow_other,[email protected]:/home/mysql5.7.39/data/tmp/data/;xtrabackup–defaults-file=/ho......