SQL выборка по большей дате

Есть прекрасно работающий запрос:

    SELECT
    gcs.collaborator_id
,   gcs.collaborator_fullname
,   cs.hire_date
,   cs.position_name
,   cs.position_parent_name
,   ser.delivery_date
,   ser.expire_date
,   ser.id AS sert_id
,   als.id AS activ_learning
,   als.start_usage_date
,   DATEDIFF(MONTH, ser.delivery_date, getDate()) as diff
FROM group_collaborators gcs
    JOIN collaborators cs on gcs.collaborator_id = cs.id
    LEFT JOIN certificates ser ON cs.id = ser.person_id AND ser.type_name LIKE 'Валютный сертификат'
    LEFT JOIN active_learnings als ON cs.id = als.person_id AND als.course_id = 6487888464122890146
WHERE gcs.code LIKE 'Retail_valSert';

Проблема в том, что в результирующую таблицу попадают дубли сотрудников (у некоторых несколько сертификатов). Соответственно появилась необходимость добавить условие по ser.delivery_date - из множества сертификатов выбирать только те, у которых delivery_date большая. Коллеги предложили воспользоваться MAX() и GROUP BY. Но все мои попытки доработать данный код ни к чему не приводят. Помогите, пожалуйста. Для справки (только осваиваю SQL)


Ответы (1 шт):

Автор решения: Akina
WITH cte AS 
(
    SELECT
    ROW_NUMBER() OVER (PARTITION BY gcs.collaborator_i ORDER BY ser.delivery_date DESC) rn,
    gcs.collaborator_id
,   gcs.collaborator_fullname
,   cs.hire_date
,   cs.position_name
,   cs.position_parent_name
,   ser.delivery_date
,   ser.expire_date
,   ser.id AS sert_id
,   als.id AS activ_learning
,   als.start_usage_date
,   DATEDIFF(MONTH, ser.delivery_date, getDate()) as diff
FROM group_collaborators gcs
    JOIN collaborators cs on gcs.collaborator_id = cs.id
    LEFT JOIN certificates ser ON cs.id = ser.person_id AND ser.type_name LIKE 'Валютный сертификат'
    LEFT JOIN active_learnings als ON cs.id = als.person_id AND als.course_id = 6487888464122890146
WHERE gcs.code LIKE 'Retail_valSert'
)
SELECT *
FROM cte 
WHERE rn = 1;
→ Ссылка