求助:如何在SQL Server中筛选每个Job对应的最小Sequence行(GROUP BY MIN方法失效)
解决每个Job取最小Sequence行的问题
我懂你的困扰——你想给每个工单(Job)只保留Sequence最小的那一行,但用GROUP BY搭配MIN函数的方式没达到预期效果对吧?这主要是因为你当前的GROUP BY里包含了太多额外字段,导致分组的粒度太细,没办法真正按Job来聚合取最小SEQ。
先说说你当前SQL的问题
你的GROUP BY子句里包含了dbo.User_Values.Numeric2、dbo.Work_Center.UVText4、dbo.Job.Status等一堆字段,这意味着只有当这些字段完全相同时,才会被分到同一个组里。哪怕是同一个Job,只要这些字段有差异,就会被拆成多个分组,每个分组取自己的MIN(Sequence),这显然不是你要的“每个Job只取最小SEQ”的结果。
推荐两种可行的解决方案
方案一:用窗口函数ROW_NUMBER()(推荐)
这种方法最灵活,也能轻松保留你需要的所有字段,不会受GROUP BY的限制。核心思路是给每个Job下的行按Sequence升序排号,然后只取排号为1的行:
WITH JobOpsRanked AS ( SELECT jo.Job, jo.Sequence AS SEQ, jo.Work_Center, wc.Department, uv.Numeric2, wc.UVText4, j.Status AS JobStatus, jo.Status AS OpStatus, uv.Decimal1, -- 按Job分组,Sequence从小到大排序,给每行分配一个行号 ROW_NUMBER() OVER (PARTITION BY jo.Job ORDER BY jo.Sequence ASC) AS RowNum FROM dbo.Job_Operation jo INNER JOIN dbo.Job j ON jo.Job = j.Job INNER JOIN dbo.User_Values uv ON j.User_Values = uv.User_Values INNER JOIN dbo.Work_Center wc ON jo.Work_Center = wc.Work_Center WHERE wc.UVText4 = 'Machining' -- 把HAVING里的条件移到WHERE更高效 ) SELECT Job, SEQ, Work_Center, Department, Numeric2, UVText4, JobStatus, OpStatus, Decimal1 FROM JobOpsRanked WHERE RowNum = 1 -- 只保留每个Job里Sequence最小的那一行 ORDER BY Decimal1 DESC, SEQ;
如果你的数据里存在同一个Job有多个行的Sequence是相同最小值的情况,想要保留所有这些行,可以把ROW_NUMBER()换成RANK()——这样并列最小的行都会被标记为RowNum=1。
方案二:用子查询匹配最小Sequence
这种方法适合习惯用子查询的场景,先找出每个Job的最小Sequence,再匹配回原表获取完整行数据:
SELECT jo.Job, jo.Sequence AS SEQ, jo.Work_Center, wc.Department, uv.Numeric2, wc.UVText4, j.Status AS JobStatus, jo.Status AS OpStatus, uv.Decimal1 FROM dbo.Job_Operation jo INNER JOIN dbo.Job j ON jo.Job = j.Job INNER JOIN dbo.User_Values uv ON j.User_Values = uv.User_Values INNER JOIN dbo.Work_Center wc ON jo.Work_Center = wc.Work_Center WHERE wc.UVText4 = 'Machining' AND (jo.Job, jo.Sequence) IN ( -- 先找出每个Job对应的最小Sequence SELECT Job, MIN(Sequence) FROM dbo.Job_Operation GROUP BY Job ) ORDER BY uv.Decimal1 DESC, jo.Sequence;
这个方法会返回所有Job和最小Sequence匹配的行,也就是说如果同一个Job有多个行的Sequence是最小值,都会被保留下来。
内容的提问来源于stack exchange,提问作者Northbama
相关产品推荐
相关产品推荐

