为每个组返回唯一顶行的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%在得到提取适当的数据。
任何帮助,将不胜感激!
只需使用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
您应该删除最后一行我猜:“ORDER BY a.versionNumb DESC” –
@VadymPechenoha好电话 –
试图使用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
为什么选择“versionNumb”列?当一个系统名称有多个记录时,你期望它是什么,但只有一个记录应该出现在结果中? –
你介意发表你的表格的片段吗? – Isaiah3015
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 –