为每个组返回唯一顶行的SQL查询

问题描述:

试图编写一个将为每个系统名称返回唯一记录的查询。为每个组返回唯一顶行的SQL查询

由于存在同一产品的多个版本,因此现有查询会为每个systemName返回多个记录。 我可以按版本号进行排序,但希望只能保留每个系统的顶级版本号。

SELECT DISTINCT v.sysName 
     ,v.groupName 
     ,a.versionNumb 
     ,b.userName 
    FROM table1 AS a 
    INNER JOIN table2 AS v ON v.sID = a.sID 
    INNER JOIN table3 AS b ON v.sID = b.sID 
    WHERE a.versionNumb LIKE '10.%' 
    AND v.groupName LIKE '%' + @groupVar 
    ORDER BY a.versionNumb DESC 

使用ROW_NUMBER()进行排序,并返回行值尝试,但我仍然不是100%在得到提取适当的数据。

任何帮助,将不胜感激!

+0

为什么选择“versionNumb”列?当一个系统名称有多个记录时,你期望它是什么,但只有一个记录应该出现在结果中? –

+0

你介意发表你的表格的片段吗? – Isaiah3015

+0

machine1组3 softwareVersion10.123 user2 ---- machine1组3 softwareVersion10.111 user2 ---- machine2组1 softwareVersion10.111 user4 ---- machine2组1 softwareVersion10.107 user4 ---- machine3组1 softwareVersion10.123 user5 ---- machine4组2 softwareVersion10.111 user1 ---- machine4组2 softwareVersion10.100 user1 –

只需使用MAX()GROUP BY

SELECT v.sysName, 
     v.groupName, 
     MAX(a.versionNumb) as versionNumb, 
     b.userName 
FROM table1 AS a 
INNER JOIN table2 AS v ON v.sID = a.sID 
INNER JOIN table3 AS b ON v.sID = b.sID 
WHERE a.versionNumb LIKE '10.%' 
AND v.groupName LIKE '%' + @groupVar 
GROUP BY v.sysName, v.groupName, b.userName 

我删除您DISTINCT,因为它是多余的了GROUP BY

+0

您应该删除最后一行我猜:“ORDER BY a.versionNumb DESC” –

+0

@VadymPechenoha好电话 –

+0

试图使用GROUP BY而不是ORDER BY,我继续得到以下内容: - 列xyz在选择l中无效因为它不包含在聚合函数或GROUP BY子句中。 –

您可以通过系统名称使用查询GROUP BY和加入后把所有的信息你需要

SELECT d.sysName, max (d.versionNumb) 
    FROM (select * from table1 AS a 
    INNER JOIN table2 AS v ON v.sID = a.sID) as d 
Group by d.sysName