如何使用日期条件删除SQL中的重复行?

时间:2017-01-21 00:23:28

标签: sql duplicates

我的数据是:

ID  Name    date
1   Ben 2017-01-21
2   Mark    2017-01-20
3   Mark    2017-01-21
4   Ell 2017-01-19

它应该是

ID  Name    date
1   Ben 2017-01-21
3   Mark    2017-01-21
4   Ell 2017-01-19

只是旧的"标记"必须删除ID为2的

3 个答案:

答案 0 :(得分:4)

如果您只想返回姓名的最新行,可以使用:

select t.*
from t
where t.date = (select max(t2.date) from t t2 where t2.name = t.name);

在大多数数据库中,您可以对delete使用类似的逻辑:

delete from t
    where t.date < (select max(t2.date) from t t2 where t2.name = t.name)

答案 1 :(得分:0)

您可以使用以下查询。我通常避免在select中添加子查询或在哪里避免性能问题。

Select id, name date from mydata x
inner join (SELECT name,MAX(date) from mydata group by name) y on x.name=y.name

答案 2 :(得分:0)

看起来表格不是normalized。但是,如果数据库是SQL Server 2008及更高版本,则以下问题应该有效,credit

WITH cte AS (
      SELECT Id, Name, [Date]
         row_number() OVER(PARTITION BY Name ORDER BY [date]) AS [RowNum]
      FROM YourTable
    )
DELETE cte WHERE [RowNum] > 1