代码编织梦想

注,仅适用于MYSQL8以上,不然无法使用窗口函数

示例数据如下:

lot_idfile_namefile_timetype
1362911113629111_20231101_165326.csv2023-11-01 16:53:181
1362911113629111_20231110_095855.csv2023-11-10 09:58:312
1362911113629111_20231110_084255.csv2023-11-10 08:41:562
1362911113629111_20231110_093731.csv2023-11-10 08:41:562
12341234_20231102_134030.csv2023-11-02 13:40:211
12341234_20231102_171750.csv2023-11-02 17:17:311
12341234_20231106_122026.csv2023-11-06 12:18:362

若想取出数据,按lot_id和type分组,依据file_time最新的那条数据,获取到file_name. 即取出如下数据

lot_idfile_namefile_timetype
12341234_20231102_171750.csv2023-11-02 17:17:001
12341234_20231106_122026.csv2023-11-06 12:18:002
1362911113629111_20231101_165326.csv2023-11-01 16:53:001
1362911113629111_20231110_095855.csv2023-11-10 09:58:002

可使用如下sql完成

-- 首先按照需求排序记得行号
select lot_id,file_name,file_time,`type`,
ROW_NUMBER() over(PARTITION BY lot_id,`type` order by file_time desc) as `rank` FROM test;

-- 完整sql,取出行号为1的数据,即最新的数据
select * from 
(
select lot_id,file_name,file_time,`type`,
ROW_NUMBER() over(PARTITION BY lot_id,`type` order by file_time desc) as `rank` FROM test
)a where a.`rank` = 1

其中

  • PARTITION BY lot_id,type. 语法类似与group by,指定分组要求.
  • order by file_time desc即指定组内按什么排序.
  • ROW_NUMBER()为窗口函数,记为组内的行号
    注意:窗口函数不会改变原有的数据行数,可以认为是查看分析数据的一种方式,即在原数据上加上一列

上半句片段执行结果如下,rank表示按照需求的排序情况

lot_idfile_namefile_timetyperank
1362911113629111_20231101_165326.csv2023-11-01 16:53:1811
1362911113629111_20231110_095855.csv2023-11-10 09:58:3121
1362911113629111_20231110_084255.csv2023-11-10 08:41:5622
1362911113629111_20231110_093731.csv2023-11-10 08:41:5623
12341234_20231102_134030.csv2023-11-02 13:40:2112
12341234_20231102_171750.csv2023-11-02 17:17:3111
12341234_20231106_122026.csv2023-11-06 12:18:3621
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37293230/article/details/134438806

mysql 按某个字段分组每组取出最大时间的一条数据-爱代码爱编程

在MySql中 做分组时想取出每一组最新的时间那一条,但是做了分组后发现每组取的时间不是最新的,也是进行了下述操作 一.先进行排序在进行分组 执行sql select * from (select pihao,spbh,cgl,dj,created,provider_id from merchant_ysb_cginfo ORDER BY cre

mysql获取数据中最新的一条_dong顾念的博客-爱代码爱编程

根据时间排序获取日志表中最新的一条数据 select * from ( select t.* row_number() over(partition by t.prci_id order by t.date_time desc) as rowNum from t_user_log t where t.userId ='' --用户的id

mysql分组查询每组最新的一条数据(提供三种实现方法,附带三种方法查询性能比较和分析查询原理)_mysql group by 取最新的一条-爱代码爱编程

目录 一、前言二、注意事项三、准备SQL四、错误查询分析4.1、错误原因 五、实现方法5.1、实现方法一(使用 LIMIT 查询)5.2、实现方法二(使用 DISTINCT 查询)5.3、实现方法三(使

mysql查询当前时间或未来时间内的数据_mysql 查找 时间最新的一条数据-爱代码爱编程

见博客地址:MySQL查询当前时间的前几天的数据-CSDN博客 查询5分钟前的数据 select * from table where end_date between date_add(now(), interval - 300 SECOND) and NOW()   查询当天的所有数据 SELECT * FROM 表名 WHER