2017-07-26 8 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%ではないです。

助けていただけたら幸いです! MAX()GROUP BY

+0

なぜ "versionNumb"列を選択していますか? 1つのシステム名に対して複数のレコードが存在する場合に、その結​​果として1つのレコードのみが存在する必要がある場合は、何を期待していますか? –

+0

テーブルのスニペットを投稿してもよろしいですか? – Isaiah3015

+0

machine1にグループ3 softwareVersion10.123 USER2 ---- machine1にグループ3 softwareVersion10.111 USER2 ---- machine2でGROUP1 softwareVersion10.111 USER4 ---- machine2でGROUP1 softwareVersion10.107 USER4 ---- machine3にグループ1 softwareVersion10.123 user5 ---- machine4グループ2ソフトウェアバージョン10111 user1 ---- machine4グループ2ソフトウェアバージョン10.100ユーザー1 –

答えて

0

だけ使用します。私は削除

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

+0

最後の行: "ORDER BY a.versionNumb DESC" –

+0

@VadymPechenohaいいえコール –

+0

ORDER BYの代わりにGROUP BYを使用しようとしても、私は次のことを続けています: - 列xyzは選択lで無効ですistは集計関数またはGROUP BY句のいずれにも含まれていないためです。 –

0

と冗長だから必要があります

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 
関連する問題