获取用户最新SOP记录问题求助:SQL返回全部记录而非最新版本
SQL查询返回所有SOP记录?教你仅获取每个SOP的最新版本
我明白你的问题——你现在的SQL查询返回了全部SOP记录,但你只想要每个SOP的最新版本(通过Reference字段末尾的两位数字判断,比如SOP/QA01/02比SOP/QA01/01新)。我们来一步步修复这个问题。
问题分析
你的现有查询存在两个核心问题:
- 字段错误:你写了
MAX(PR.Name) AS Reference,这明显是笔误,应该使用PR.Reference字段来获取SOP的版本标识。 - 分组逻辑错误:GROUP BY子句包含了
PR.ID,而ID是每条记录的唯一标识,这会导致每一行都被单独分组,MAX函数根本无法筛选出每个SOP的最新版本。
解决方案
我们先通过CTE(公共表表达式)找出每个用户下每个SOP的最新版本,再关联原表获取完整的记录信息:
WITH LatestSOP AS ( SELECT PR.Responsible_Name AS Name, -- 提取SOP的基础标识(去掉末尾的版本号部分) LEFT(PR.Reference, LEN(PR.Reference) - 3) AS SOP_Base, -- 提取末尾两位版本号并转成整数,取最大值 MAX(CAST(RIGHT(PR.Reference, 2) AS INT)) AS Latest_Version FROM PR GROUP BY PR.Responsible_Name, LEFT(PR.Reference, LEN(PR.Reference) - 3) ) SELECT PR.ID AS RecordID, PR.Parent_ID, PR.Responsible_Name AS Name, PR.Reference, TT.S_Value AS Title, EU.S_Value AS Unit, ED.S_Value AS Dept, ES.S_Value As Site, EDV.S_Value AS Div, ST.NAME AS Status FROM PR -- 关联CTE,筛选出最新版本的记录 INNER JOIN LatestSOP LS ON PR.Responsible_Name = LS.Name AND LEFT(PR.Reference, LEN(PR.Reference) - 3) = LS.SOP_Base AND CAST(RIGHT(PR.Reference, 2) AS INT) = LS.Latest_Version -- 保留原有的关联表 INNER JOIN TW_V_Training_Title TT ON PR.ID = TT.PR_ID INNER JOIN PR_Status_Type ST ON PR.Status_Type = ST.ID INNER JOIN TW_V_Employee_Department ED ON PR.Parent_ID = ED.PR_ID INNER JOIN TW_V_Employee_Unit EU ON PR.Parent_ID = EU.PR_ID INNER JOIN TW_V_Employing_Site ES ON PR.Parent_ID = ES.PR_ID INNER JOIN TW_V_Employee_Division EDV ON PR.Parent_ID = EDV.PR_ID;
代码解释
1. CTE部分(LatestSOP)
LEFT(PR.Reference, LEN(PR.Reference) - 3):提取SOP的基础部分,比如把SOP/QA01/01转为SOP/QA01/,IS.01.06转为IS.01.,确保同一个SOP的不同版本能被归为一组。MAX(CAST(RIGHT(PR.Reference, 2) AS INT)):提取Reference末尾的两位数字,转成整数后取最大值,得到每个SOP的最新版本号。- 按
Responsible_Name(用户名)和SOP_Base分组,确保每个用户下的每个SOP都能找到对应的最新版本。
2. 主查询部分
- 将原PR表与CTE关联,通过用户名、SOP基础标识和版本号,精准筛选出仅属于最新版本的记录。
- 保留你原来的所有关联表,确保能获取到Title、Unit、Dept等完整业务字段。
注意事项
如果你的Reference格式有变化(比如版本号是三位,或者分隔符不同),可以调整提取逻辑:
- 若版本号是三位:将
RIGHT(PR.Reference, 2)改为RIGHT(PR.Reference, 3),同时把LEN(PR.Reference)-3改为LEN(PR.Reference)-4。
内容的提问来源于stack exchange,提问作者NMS
相关产品推荐
相关产品推荐

