2013-04-08 110 views
0

在我創建這個查詢視圖,從查詢刪除重複數據和不同的條件

SELECT DISTINCT 
ClientCode, ClientName, Address1, Address2, City, Country, CreatedBy, CreatedDate 
FROM 
Contact 
GROUP BY 
ClientCode, ClientName, Address1, Address2, City, Country, CreatedBy, CreatedDate 

哪位能給我這個結果,

001 ABC Lot No, Road, City B, US Alice 03/04/2012 
001 ABC Lot No, Road, City B, US Benny 04/04/2012 

我應該如何設計我的查詢,以便我可以過濾出重複的數據?我想通過僅顯示一行數據來忽略兩個字段 - CreatedBy和CreatedDate。這是我想得到的結果。

001 ABC Lot No, Road, City B, US Alice 03/04/2012 !OR! 
001 ABC Lot No, Road, City B, US Benny 04/04/2012 

我想查詢有比較只有ClientCode,CLIENTNAME,地址1,地址,城市和鄉村,以過濾掉重複的數據的能力。保持CreatedBy和CreatedDate的原因是因爲我必須將它包含在另一個接口中。

回答

0

您可以使用排名功能獲取eac的最新聯繫信息h地址根據最近的日期:

with recentContact as 
(
    select * 
    , mostRecentRank = row_number() over 
    (
     partition by ClientCode 
     ,ClientName 
     ,Address1 
     ,Address2 
     ,City 
     ,Country 
     order by CreatedDate desc 
    ) 
    from contacts 
) 
select ClientCode 
     ,ClientName 
     ,Address1 
     ,Address2 
     ,City 
     ,Country 
     ,CreatedBy 
     ,CreatedDate 
from recentContact 
where mostRecentRank = 1 

SQL Fiddle with demo

+0

正是我需要的。我遇到這個問題,我應該如何選擇數據,如果它重複,現在通過選擇最近的數據是有意義的!謝謝! :) – sniggy 2013-04-08 08:35:23

0

嘗試添加

GROUP BY field

哪裏場應該是等於像CLIENTNAME

在你的特殊情況下,任何領域,你可以添加多個字段GROUP BY像

GROUP BY clientname, clientfoo ..

+0

我試過GROUP BY ClientCode,ClientName,Address1,Address2,City,Country,CreatedBy,CreatedDate。但它不起作用。 – sniggy 2013-04-08 07:48:06

+0

他將如何選擇createdBy和createdDate?他將不得不使用聚合函數來選擇它,對吧? – 2013-04-08 07:49:48

+0

我想要的是通過忽略CreatedBy和CreatedDate字段,將不會返回重複數據的查詢(ClientCode,ClientName,Address1,Address2,City和Country字段的相同信息)。 – sniggy 2013-04-08 07:53:08