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

时间:2017-07-26 20:07:15

标签: 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%获取正确的数据。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

只需使用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

是多余的

答案 1 :(得分:0)

您可以按系统名称使用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