2015-02-19 4 views
0

Я хочу получить отдельный кортеж даты рождения из моей таблицы SQL Server.Как удалить дубликат из SQL Aggregate MAX

Select id,insCode,max(birthdate) 
from birthDateTable 
    where id IN (785412,852963) 
     group by id,insCode 

Этот запрос возвращает повторяющиеся идентификаторы с разными значениями. Я хочу получить максимальную дату рождения из каждого идентификатора один раз.

+0

Вы имеете в виду разные значения insCode? Ну, кто-то должен решить, какое значение insCode выбрать, возможно, с датой рождения = max (дата рождения)? – jarlh

+1

У каждого человека должна быть одна дата рождения. Я должен обновить некоторую дату рождения, которая изменилась из-за неизвестной даты рождения. По умолчанию указывается. – abdoulaye

ответ

0

Найти все строки для идентификатора, которые имеют дату = макс даты для этого ID:

with cte as 
(
    select id, insCode, birthdate 
    from birthDateTable 
    where id IN (785412,852963) 
) 
select id, insCode, birthdate 
from cte c1 
where birthdate = (select max(birthdate) from cte c2 
        where c1.id = c2.id) 

и как найти идентификаторы с множественными, разные дни рождения:

select id 
from birthDateTable 
group by id 
having count(distinct birthdate) > 1 
+0

Спасибо всем;) Проблема решена! – abdoulaye

+0

Добро пожаловать. – jarlh

0

Вы можете использовать CTE + row_number:

With CTE AS 
(
    SELECT id, insCode, birthdate 
      rn = row_number() over (Partition by id, insCode Order by birthdate DESC) 
    FROM dbo.birthDateTable 
) 
SELECT id, insCode, birthdate FROM CTE WHERE rn = 1 
Смежные вопросы