2017-04-04 63 views
0

我想从我的表中删除重复的accountno's。选择删除重复的帐号并包括其他字段

SELECT ACCOUNTNO,日期时间,发送resultCode,楼盘 FROM dbo.Most_Recent_Result

我曾尝试不同的,但裁判的一些行的不同。

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

+1

这将有助于知道您正在使用的数据库。 - MySQL? PostgreSQL的? SQL Server? etc ... –

+0

我正在使用SQL Server 2014 – SRC

+0

查看数据表的示例也很有帮助。据我了解,你有多个ACCOUNTNO条目与各种日期时间,你想只保留最近的日期时间,这是正确的吗? – SandPiper

回答

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重复条目,没有存在具有相同日期时间,否则你仍然会得到重复。

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

EDIT 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 
+0

有记录具有相同的accountno和日期,我试图摆脱重复,我只想要一个记录每个Accountno – SRC

+0

请参阅编辑。除非您的RESULTCODE和REF字段在该最大日期也有不同的值。如果是这样,我希望你至少可以看到我要去的地方,以得到你的答案。如果您真的关心REF或RESULTCODE中的不同值,那么您并不想删除那些重复的记录。 – SandPiper

+0

我不在乎REF或RESULTCODE中这个表的值,在大多数情况下它们是相同的。我只需要在报告中使用公式的这些字段。 – SRC

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

+0

收到以下错误: – SRC

+0

无法在网格窗格和图表窗格中表示SQL文本。 – SRC

+0

这个错误是由于视图设计者本身。查看此链接:https://social.msdn.microsoft.com/Forums/en-US/e3036b3d-0f61-4aec-a879-f6602e86515b/sql-server-2008-management-studios-why-do-i-get -SQL-文本不能待表示,在能源网窗格?论坛= sqltools – anonyXmous