2013-07-26 4 views
1

У меня есть таблица приложений, содержащая номера телефонов. Я пытаюсь выбрать верхние 10000 строк, упорядоченных по убыванию приложения (для получения последних приложений), но я хочу удалить все дублированные номера телефонов.SQL выбирает строки, но удаляет записи с дублированным номером телефона

Я пытался ..

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

Хотя этот запрос сортирует его Forename по возрастанию, т.е. больше не в ApplicationID порядке.

+0

попробуйте использовать группу по PHONENUMBER –

+0

Но тогда я не могу приказать ApplicationID, как это не в группе по п – lisburnite

+0

Таким образом, для 'PhoneNumber', которые имеют множество' ApplicationId' которых один использовать для заказа ? –

ответ

3

Я думаю, что логика, которую вы хотите, это: Получите последний идентификатор приложения для каждого номера телефона, а затем верните информацию об этом.

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 
Смежные вопросы