次のレコードを持つ一時テーブル#tempがあります。
col1 col2
a 11
a 12
a 13
b 5
b 8
最大col2のレコードのみを保持したいので、結果テーブルは次のようになります。
col1 col2
a 13
b 8
別の一時テーブルを作成せずにクエリを作成するのを手伝ってくれる人はいますか?
次のレコードを持つ一時テーブル#tempがあります。
col1 col2
a 11
a 12
a 13
b 5
b 8
最大col2のレコードのみを保持したいので、結果テーブルは次のようになります。
col1 col2
a 13
b 8
別の一時テーブルを作成せずにクエリを作成するのを手伝ってくれる人はいますか?
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
)
; 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を使用します。