2016-05-18 9 views
0

この質問のいくつかの種類が尋ねられましたが、特定のシナリオに対する回答が見つかりませんでした。クエリで多数のフィールドを選択する際にMAXを使用する

私のクエリには50以上のフィールドが選択されており、そのうちの1つだけがMAX()を使用して集計です。 GROUP BY句では、クエリを実行させるために50個すべてではなく、nameとUserIDという2つの特定のフィールドだけを渡したいと思います。下の小さなサブセットを参照してください。

SELECT 
t1.name, 
MAX(t2.id) as UserID, 
t3.age, 
t3.height, 
t3.dob, 
FROM table1 t1 
LEFT JOIN table2 t2 ON t1.id = t2.id 
LEFT JOIN table3 t3 ON t1.id = t3.id 
GROUP BY t1.name, UserID 

私の目標を達成するための回避策がありますか? データベースはSQL Serverであり、どんな助けでも大歓迎です。

+1

希望の結果を明確に伝える必要があります。それをより明確にするためのサンプル出力を提供する。あなたの提案ごとに – Alex

+0

が編集されました。ありがとうございます – rafacardosoc

+0

私はまだ混乱しています、特にあなたのSQLは無効です(GROUP BY t1.name、UserID)。 SQL Fiddle(http://sqlfiddle.com/)を作成してください。 – Alex

答えて

4

Hmmm。 。 。他のフィールドにはどんな値が必要ですか?あなたは、各idcodeためmax() 1の列が必要な場合は、行うことができます:

select t.* 
from (select t.*, max(col) over (partition by id, code) as maxcol 
     from t 
    ) t 
where col = maxcol; 

idがユニークであるかもしれないことを考えると、あなたは各codeためid最大だけでなく、他の列をお勧めします:

select t.* 
from (select t.*, max(id) over (partition by code) as maxid 
     from t 
    ) t 
where id = maxid; 
+0

ありがとうゴードン。私はまだ私のケースであなたのソリューションを使用しようとしています。私は名前とIDでグループ化する必要があります。私はまだできませんでしたが、私が成功したかのように伝えます。 – rafacardosoc

関連する問題