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

news/2024/10/17 22:13:31/

注,仅适用于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

http://www.ppmy.cn/news/1222782.html

相关文章

【题解】洛谷 P9658 Laser Trap

题解-P9658 Laser Trap 题目传送门 题意简述 题面是英文的,还没翻译,就讲一讲吧。 n n n 个激光发射器,两两之间产生激光束,将平面分为若干区域。 问至少删去多少个发射器,可以使得原点与外侧区域联通。 多组数据&a…

C#值类型设置为null

Nullable<DateTime> date null; 赋默认值防止报错&#xff1a; DateTime ? date new DateTime(3000,1,1); DateTime date2 new date.GetValueOrDefault();

精彩回顾|从架构到实践,AntDB融合型数据库揭秘

当今社会中的信息除了“多”&#xff0c;人们对于“效率”和“速度”的要求也越来越高。譬如&#xff0c;对于很多企业决策者来说&#xff0c;在当前的经济形势下需要尽一切可能降本增效。过去每周看看经营报表的习惯&#xff0c;现在慢慢转变为实时可视化分析企业当前的经营状…

Unity3d 导入中文字体转TMPtext asset

外部字体放入unity仓库以后呢&#xff0c;需要把这个字体转成用立体的字体文件才可以被使用&#xff01; 要想转换的话呢先放入仓库对字体点右键上面有一个Create创建里面有一个TEXT Asset&#xff0c;创建好就可以使用了

RT-DETR优化改进:轻量级Backbone改进 | VanillaNet极简神经网络模型 | 华为诺亚2023

🚀🚀🚀本文改进:一种极简的神经网络模型 VanillaNet,支持vanillanet_5, vanillanet_6, vanillanet_7, vanillanet_8, vanillanet_9, vanillanet_10, vanillanet_11等版本,相对于自带的rtdetr-l、rtdetr-x参数量如下: layersparametersgradientsvanillanet_5338277174…

Python爬虫批量下载图片

一、思路&#xff1a; 1. 分析URL&#xff0c;图片的URL内嵌于base_url的返回当中 2. 下载图片 二、代码 import time import requests import os from lxml import etreeclass DownloadImg():爬虫进行美女图片下载def __init__(self):self.url http://xxxxxx/4kmeinv/self…

image is being used by stopped container 7d2ff8620f3b 删除镜像失败怎么办

这个错误信息表明&#xff0c;镜像 55860ee0cd73 正被一个已停止的容器 7d2ff8620f3b 使用&#xff0c;因此无法正常删除。要解决这个问题&#xff0c;你有两个选择&#xff1a; 删除使用该镜像的容器&#xff1a;首先删除引用该镜像的容器&#xff0c;然后再删除镜像。这可以通…