如何根据特定条件从同一个表中删除额外的记录?

时间:2013-02-01 21:45:59

标签: sql

我有一个临时表#temp,它有以下记录:

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

我想只保留具有max col2的记录,结果表应该像

col1    col2
a       13
b       8

任何人都可以帮我编写查询而不创建另一个临时表吗?

3 个答案:

答案 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)

您需要使用Group By子句:

SELECT
    colA,
    MAX(colB)as colB
FROM Tbl

GROUP BY
    ColA

See FIDDLE