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

见小提琴

于 2013-02-01T21:52:02.020 回答