选择删除重复的帐号并包含其他字段

时间:2017-04-04 23:14:48

标签: sql sql-server duplicates

我正在尝试从我的表中删除重复的accountno。

SELECT ACCOUNTNO,DateTime,RESULTCODE,REF 来自dbo.Most_Recent_Result

我尝试过DISTINCT,但REF在某些行上有所不同。

如何删除重复的accountno?我只是想删除第二个匹配的accountno记录。

2 个答案:

答案 0 :(得分:0)

SELECT DISTINCT ACCOUNTNO, DateTime, RESULTCODE, REF
FROM dbo.datetime as o
LEFT JOIN (SELECT ACCOUNTNO, MAX(datetime) AS max_datetime
        FROM dbo.datetime GROUP BY ACCOUNTNO) i ON o.ACCOUNTNO = i.ACCOUNTNO
WHERE o.DateTime = i.max_datetime

这假设对于每个ACCOUNTNO重复条目,不存在具有相同DateTime的条目,否则您仍将获得重复项。

编辑:由于您的数据有多个具有相同日期的ACCOUNTNO,此时您可以添加DISTINCT关键字。这将删除每个ACCOUNTNO的最大日期重复

编辑2:如果您不关心将显示哪个RESULTCODE和REF字段,您可以使用聚合函数只获取一个:

SELECT DISTINCT o.ACCOUNTNO, o.DateTime, MAX(o.RESULTCODE), MAX(o.REF)
FROM dbo.datetime as o
LEFT JOIN (SELECT ACCOUNTNO, MAX(datetime) AS max_datetime
    FROM dbo.datetime GROUP BY ACCOUNTNO) i ON o.ACCOUNTNO = i.ACCOUNTNO
WHERE o.DateTime = i.max_datetime
GROUP BY o.ACCOUNTNO, o.DateTime
ORDER BY ACCOUNTNO

答案 1 :(得分:0)

请试试这个:

  select   accountno, datetime, resultcode, ref 
  from ( 
  select dense_rank() over (partition by accountno order by datetime desc, ref ) as rn
  ,accountno, datetime, resultcode, ref 
  from dto.datetime
  )
where rn = 1
order by 1,2

这是我的reference