繁体   English   中英

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

[英]SQL query to return unique top row for each group

尝试编写一个查询,该查询将为每个系统名称返回唯一记录。

由于存在同一产品的多个版本,因此现有查询针对每个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是多余的

您可以使用查询来按系统名称对GROUP BY进行查询,并在JOIN之后使用所需的所有信息

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM