我有一个临时表#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
)
SQLFiddle上的演示
; 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。