2016-08-02 8 views
1

以外に追加のデータを引き出し、私はそうグループ化されたデータ

ID  Value1  Value2 
1   8   4 
1   4   2 
1   9   3 
1   3   1 
2   4   9 
2   5   7 
2   6   4 
2   7   5 
2   1   1 

私はでグループ化された列1の最大値を含む対応する行からのデータのみをプルしようとしているように見えるのMicrosoft SQL内で設定データを持っていますID番号。結果は次のようになります。

ID  Value1 Value2 
1  9   3 
2  7   5 

以下は私が試したものですが、失敗しました。 Value2が削除された場合に機能します。

USE [Database] 
SELECT [ID], 
     MAX([Value1]) as Value1, 
     [Value2] 
FROM [dbo].[Datatable] 
GROUP BY [ID] 
+0

あなただけにしてROW_NUMBER()関数(値の降順によるIDの順序によって、パーティション)を使用して選択することができますwhere行番号= 1 – ZLK

+0

@ZLK私はSQLで非常に経験が不十分です。どう見えるか教えてください。 – User247365

+0

なので 'select id、value1、value2 from(select1、value1、value2、row_number(over)(value1からdescの順にパーティションを並べ替える)、rn = datatableから)tここでrn = 1'のようなものです。 – ZLK

答えて

1

ようROW_NUMBER()窓関数は、IDによってテーブルを分割し、(この場合には、降順に値1によって)内のデータをランク付けするために使用することができます。

また
DECLARE @DataTable TABLE (ID INT, Value1 INT, Value2 INT); 
INSERT @DataTable (ID, Value1, Value2) 
VALUES (1, 8, 4) 
    , (1, 4, 2) 
    , (1, 9, 3) 
    , (1, 3, 1) 
    , (2, 4, 9) 
    , (2, 5, 7) 
    , (2, 6, 4) 
    , (2, 7, 5) 
    , (2, 1, 1); 

SELECT ID, Value1, Value2 
FROM (
    SELECT ID, Value1, Value2, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Value1 DESC) RN 
    FROM @DataTable) T 
WHERE RN = 1; 

、値1の最大値に可能な一致が存在する場合、RANK()(またはDENSE_RANK())を使用

+0

あなたのソリューションのどの部分がValue1の最大値をIDでグループ化するのか混乱しますか? – User247365

+0

@ User247365最後にWHERE節がそれを行います。 RNはROW_NUMBER()関数に与えられた列の別名であり、各IDに対して最初の列のみが必要です。サブクエリ( 'SELECT ID、Value1、Value2、ROW_NUMBER()OVER(PARTITION BY ID ORDER BY Value1 DESC)RN FROM @ DataTable')内でSELECT文を実行すると、それが何をしているのかを見ることができます。編集:明確にするために、ここには何らかの 'GROUP BY'ステートメントを使用する必要はありません。 – ZLK

+0

@ User247365まだ混乱している場合は、結果セットを取得した後にウィンドウ関数が適用されます。したがって、サブクエリはすべてのデータを取得してから、IDの中でValue1がどのようにランク付けされているかに基づいて各行に数値を適用します。次に、外部クエリは1のランクの行からデータを取り出します。 – ZLK

1

値2の最大値を検索しましたか?この

USE [Database] 
SELECT [ID], 
    MAX([Value1]) as Value1, 
    MAX([Value2]) as Value2 
FROM [dbo].[Datatable] 
GROUP BY [ID] 
+0

value2の最大値とは必ずしも一致しないvalue1のmaxと同じ行 – User247365

関連する問題