2015-07-13 62 views
-1

我有一個擁有大約300,000行的表。自2015年3月16日至2015年7月9日期間,每日自行添加225行。SQL Server:選擇col1 + col2不止一次存在的所有重複行

我的問題是,從最近1周左右開始,一些重複行被輸入表中(即超過225日)

現在我想選擇(並最終刪除!)表中所有具有以上的siteID + reportID組合對於一個Date列的重複行。

例子是附件中的截圖:

enter image description here

+2

一旦你擦地板,不要忘記修復泄漏。如果重複項不存在,那麼一旦刪除了當前重複項,不要忘記在表中添加一個'UNIQUE'約束。 –

+0

謝謝,請記住..關於查詢的任何建議? :) – Bounty

+0

可能重複的[如何找到重複多個列?](http://stackoverflow.com/questions/8149210/how-do-i-find-duplicates-across-multiple-columns) – KarmaEDV

回答

0

當你想過濾重複的行,我建議你這種類型的查詢:

SELECT * 
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Col1, Col2 ORDER BY Col3) As seq 
    FROM yourTable) dt 
WHERE (seq > 1) 

像這樣:

SELECT * 
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY siteID, reportID, [Date] ORDER BY ID) As seq 
    FROM yourTable) dt 
WHERE (seq > 1) 
0

當Row_Number()與PARTITION BY子句,它所能提供的SQL開發人員在一個表中選擇重複的行

請檢查how to delete duplicate rows in SQL table 下面查詢的SQL教程什麼是從文章複製並應用到您的要求:

;WITH DUPLICATES AS 
(
SELECT *, 
    RN = ROW_NUMBER() OVER (PARTITION BY siteID, ReportID ORDER BY Date) 
FROM myTable 
) 
DELETE FROM DUPLICATES WHERE RN > 1 

我希望它有幫助,

+0

看來, 'PARTITION'應該由'siteID','ReportID','Date'和'ORDER'由其他一些列,比如'ID'。 –

+0

我不同意:)正如我從需求理解的那樣,如果記錄具有相同的SiteID和ReportID,則足以使記錄重複。另一方面,如果正如您所說,那麼Date應該包含在Partition By子句中,而Order By字段則定義了原始和重複項。 – Eralper

+0

我同意要求不是100%清楚。 –

相關問題