2013-07-26 64 views
1

我有一個包含電話號碼的應用程序表。我試圖選擇由ApplicationId降序排列的前10000行(以獲取最新的應用程序),但我想刪除所有重複的電話號碼。SQL選擇行但刪除重複電話號碼的記錄

我試過..

select distinct * from 
(select top 10000 Forenames, PhoneNumber 
from Application 
order by ApplicationId desc) AS Applications 

雖然此查詢通過用名字上升,即不再是爲了的applicationID進行排序。

+0

嘗試使用GROUP BY PHONENUMBER –

+0

但隨後由於它不是group by子句中 – lisburnite

+0

所以對於'PhoneNumber'其中有多個'ApplicationId'使用訂貨哪一個我不能用的applicationID訂購? –

回答

3

我認爲你想要的邏輯是:獲取每個電話號碼的最新應用程序ID,然後返回有關這些信息。

select a.* 
from (select limit 10000 PhoneNumber, max(ApplicationId) as maxaid 
     from Application a 
     group by PhoneNumber 
     order by max(aid) desc 
    ) list join 
    Application a 
    on a.ApplicationId = list.maxaid 
order by ApplicationId desc; 
+0

這是完美的工作謝謝,沒有意識到max()函數可以用這種方式 – lisburnite

0
SELECT * FROM (select top 10000 Forenames, PhoneNumber, 
ROW_NUMBER() OVER(PARTITION BY PhoneNumber ORDER BY Forenames DESC) AS Row 
from Application 
order by ApplicationId desc) as temp 
Where Row = 1