2017-04-04 54 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