按Name、Project Name分组查询最新部署版本的SQL实现需求
多字段分组获取最新部署记录的SQL解决方案
我有如下部署记录表格:
| Name | Project Name | Version deployed | Deployment date |
|---|---|---|---|
| John | Car | 1.9.8 | 2022-09-23 |
| John | Car | 2.2.4 | 2022-10-15 |
| John | Car | 2.2.5-beta3 | 2022-10-14 |
| John | Plane | 4.9.345 | 2020-03-12 |
| John | Plane | 6.7.89 | 2022-05-05 |
| Jack | Plane | 6.7.89 | 2022-05-05 |
| Jack | Plane | 6.5 | 2022-05-07 |
| Jack | Dog | 4.6.6 | 2022-08-23 |
| Jack | Plane | 6.7.89 | 2022-05-05 |
| ... |
需要编写SQL查询,按Name和Project Name分组,每组仅返回最后部署的记录,包含对应版本、部署日期,以及其他未展示的字段。期望输出如下:
| Name | Project Name | Version deployed | Deployment date |
|---|---|---|---|
| John | Car | 2.2.4 | 2022-10-15 |
| John | Plane | 6.7.89 | 2022-05-05 |
| Jack | Plane | 6.5 | 2022-05-07 |
| Jack | Dog | 4.6.6 | 2022-08-23 |
| ... |
此前尝试过多种单字段分组方案,但无法满足多字段分组且返回完整字段的需求。
解决方案
使用ROW_NUMBER()窗口函数,按指定字段分区并排序,筛选每组最新记录:
SELECT t.* FROM ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY Name, `Project Name` ORDER BY `Deployment date` DESC ) AS rn FROM your_table_name ) t WHERE t.rn = 1;
说明:
PARTITION BY Name, \Project Name``:按两个目标字段进行分组(分区)ORDER BY \Deployment date` DESC`:每个分区内按部署日期倒序排列,最新记录排在首位- 外层筛选
rn = 1:获取每个分区的第一条记录,即该组的最新部署记录 - 该方案可直接返回表中所有字段,包括未展示的其他字段
内容的提问来源于stack exchange,提问作者dadexix86
相关产品推荐
相关产品推荐

