1

次のレコードを持つ一時テーブル#tempがあります。

col1    col2
a       11
a       12
a       13
b       5
b       8

最大col2のレコードのみを保持したいので、結果テーブルは次のようになります。

col1    col2
a       13
b       8

別の一時テーブルを作成せずにクエリを作成するのを手伝ってくれる人はいますか?

4

3 に答える 3

1
DELETE t1
FROM dbo.test74 t1
WHERE NOT EXISTS (
                  SELECT 1
                  FROM dbo.test74 t2
                  WHERE t2.col = t1.col              
                  HAVING MAX(t2.col2) = t1.col2
                  )

SQLFiddleのデモ

于 2013-02-02T09:40:58.980 に答える
0
; WITH CTE AS 
(
    SELECT
        col1,
        col2,
        ROW_NUMBER() OVER (PARTITION BY Col1 ORDER BY Col2 DESC) RowNumber,
        ROW_NUMBER() OVER (PARTITION BY Col1 ORDER BY Col2 DESC) RowRank
    FROM
        #Temp
)
DELETE
    CTE
WHERE
    RowNumber > 1

ここでは、次のいずれかを使用できます。

WHERE
    RowNumber > 1

また

WHERE
    RowRank > 1

削除ステートメントで。結果に重複が必要ない場合は、RowNumberを使用します。col1ごとに最大col2の行が複数あり、両方を保持したい場合は、RowRankを使用します。

于 2013-02-01T21:49:31.283 に答える
0

Group By次の句を使用する必要があります。

SELECT
    colA,
    MAX(colB)as colB
FROM Tbl

GROUP BY
    ColA

FIDDLEを参照してください

于 2013-02-01T21:52:02.020 に答える