删除第一列中包含重复项的行,并仅保留第二列中具有最新日期的行

时间:2016-09-15 14:09:36

标签: sql-server

我有一张包含这样记录的表格:

ID  column1  column2     column3
1   23566    2016-03-12  2016-03-24
2   23566    2016-05-11  2016-06-14
3   24532    2016-01-02  2016-01-04

我想删除第一列中具有重复值的行,并且只保留第二列中具有最新日期的行。 像这样:

ID  column1  column2     column3
1   23566    2016-05-11  2016-06-14
2   24532    2016-01-02  2016-01-04

2 个答案:

答案 0 :(得分:3)

您可以将CTE与ROW_NUMBER

一起使用
WITH CTE AS
(
   SELECT t.*, RN = ROW_NUMBER() OVER (PARTITION BY Col1 ORDER BY Col2 DESC)
   FROM dbo.TableName t
)
DELETE FROM CTE WHERE RN > 1

如果您想知道要删除的内容,请将DELETE更改为SELECT *

答案 1 :(得分:2)

您可以使用row_number来获取重复和删除

;WITH cte
AS (SELECT
    *,
    ROW_NUMBER() OVER (PARTITION BY id ORDER BY date DESC) rn
FROM yourtable)
DELETE FROM cte
WHERE rn > 1