mysql取出组内按照某时间最新一条数据的其他字段

注,仅适用于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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值