我有一个临时表#temp,它有以下记录:
col1 col2
a 11
a 12
a 13
b 5
b 8
我想只保留具有max col2的记录,结果表应该像
col1 col2
a 13
b 8
任何人都可以帮我编写查询而不创建另一个临时表吗?
答案 0 :(得分: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上的演示
答案 1 :(得分: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可能有多行,并且你想要保留两个行,那么请使用RowRank。
答案 2 :(得分:0)