MS Access中提取含重复数据表格内各设备的最大序列号
解决按设备获取最大序列号的SQL查询问题
原查询的问题
- 语法错误:SELECT语句中
[2016 New].Equipment,末尾多了一个逗号,会导致SQL解析失败。 - 列名不匹配:原表格的序列号列是
serial number,但查询中使用了[Numero di serie],数据库会找不到该列。 - 分组逻辑错误:GROUP BY包含了唯一的
ID字段,每个ID对应一行数据,分组后每个组只有一条记录,完全无法实现按equipment聚合找最大序列号的需求。
正确实现方法
方法1:子查询关联法
先通过子查询计算每个设备对应的最大序列号,再关联原表获取对应的ID:
SELECT t.ID, t.equipment, t.[serial number] FROM [2016 New] t INNER JOIN ( -- 子查询:按设备分组,获取每个设备的最大序列号 SELECT equipment, MAX([serial number]) AS max_serial FROM [2016 New] GROUP BY equipment ) sub ON t.equipment = sub.equipment AND t.[serial number] = sub.max_serial;
方法2:窗口函数法(适用于支持窗口函数的数据库,如SQL Server、PostgreSQL等)
使用ROW_NUMBER()窗口函数,按设备分区后对序列号降序排序,取每个分区的第一行:
SELECT ID, equipment, [serial number] FROM ( SELECT ID, equipment, [serial number], -- 按设备分区,序列号降序排名 ROW_NUMBER() OVER (PARTITION BY equipment ORDER BY [serial number] DESC) AS rn FROM [2016 New] ) t WHERE rn = 1;
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

