2011-06-03 187 views
-1

我有這樣的表結構:SQL服務器:刪除重複的WHERE日期爲<日期

UNIQUE ID | TYPE | QUARTER | DATE 
1   | 1 |  JAN | 2/2/2222 
2   | 1 |  JAN | 4/2/2222 

如何刪除具有較舊日期重複記錄?

+0

什麼sql-server版本? – 2011-06-03 02:10:42

+0

@alex我認爲這是2008年。它是與VS2010內置的一個。雖然我不確定。 – 2011-06-03 02:12:05

+0

如果類型爲2,1月1日和日期5/2/2222,您需要刪除嗎?換句話說,你是否需要按Quarter或Type進行分組呢? – 2011-06-03 02:17:34

回答

3

在MS SQL 2008:

with cte 
as 
(
    select *, row_number() over(partition by Quarter order by Date) RowNumber 
    from MyTable 
) 
delete cte 
where RowNumber > 1 

在任何SQL

delete 
from MyTable 
    where Date not in 
    (
     select Quarter, Min(DATE) 
     from MyTable 
     group by Quarter 
    ) 

假設沒有重複的日期字段。

+0

@alex它說:「不支持OVER SQL構造或語句。」 – 2011-06-03 02:16:21

+0

@Pod Mays - 這就是我問這個版本的原因。你可以嘗試另一個查詢?我假設你沒有重複的日期。 – 2011-06-03 02:24:22

+0

@Pod Mays:嘗試使用Google搜索的消息。從我迄今爲止收集的信息來看,似乎錯誤是由VS的查詢生成器生成的,由於某些原因,它不支持OVER構造。 – 2011-06-03 06:25:45