SQL查询需求:获取指定类别零件的最新版本属性
解决指定类别下零件最新版本属性查询问题
方法一:使用窗口函数(推荐,支持SQL Server、MySQL 8.0+、PostgreSQL等主流数据库)
窗口函数ROW_NUMBER()能快速实现按零件分组,筛选每组内的最新版本数据。假设你的表名为PartAttributes,核心字段包括PartNumber(零件编号)、REV(版本号,默认版本号越大越新)、Class(类别),以及其他属性字段(如Weight、Size等)。
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY PartNumber ORDER BY REV DESC) AS RowNum FROM PartAttributes WHERE Class = 'CAR' -- 替换为目标类别,比如'TRUCK' ) AS Temp WHERE RowNum = 1;
PARTITION BY PartNumber:按零件编号分组,每个零件单独处理ORDER BY REV DESC:每组内按版本号倒序排列,最新版本排在第1位RowNum = 1:仅保留每组的第一行,即每个零件的最新版本数据
方法二:关联子查询(兼容老版本数据库)
如果你的数据库不支持窗口函数(如MySQL 5.x),可以先通过子查询获取每个零件的最新版本号,再关联原表提取完整属性:
SELECT pa.* FROM PartAttributes pa INNER JOIN ( SELECT PartNumber, MAX(REV) AS LatestRev FROM PartAttributes WHERE Class = 'CAR' GROUP BY PartNumber ) AS LatestParts ON pa.PartNumber = LatestParts.PartNumber AND pa.REV = LatestParts.LatestRev WHERE pa.Class = 'CAR';
- 子查询
LatestParts先筛选指定类别下每个零件的最大版本号 - 通过
PartNumber和REV关联原表,拿到对应最新版本的所有属性数据
注意事项
- 如果
REV是V1、V2这类字符串版本号,需确保排序逻辑符合实际版本规则(比如V10要比V2新,可能需要提取数字部分排序) - 若同个零件同版本存在多条数据,窗口函数方法会随机取一条;若需保留所有同版本数据,可将
ROW_NUMBER()替换为RANK()
内容的提问来源于stack exchange,提问作者RAAZ Mi
相关产品推荐
相关产品推荐

