2017-07-26 85 views
1

試圖編寫一個將爲每個系統名稱返回唯一記錄的查詢。爲每個組返回唯一頂行的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 –

回答

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

+0

您應該刪除最後一行我猜:「ORDER BY a.versionNumb DESC」 –

+0

@VadymPechenoha好電話 –

+0

試圖使用GROUP BY而不是ORDER BY,我繼續得到以下內容: - 列xyz在選擇l中無效因爲它不包含在聚合函數或GROUP BY子句中。 –

0

您可以通過系統名稱使用查詢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