Я студент и новичок в SQL. Я работаю с базой данных, которые касаются формирования людей. Некоторая формация должна была быть сделана снова перед определенным лимитом даты (некоторые - каждые 24 месяца или каждые 36 месяцев), но может быть сделана снова, если требуется. Мне нужен запрос, который показывает всех людей, которые должны быть «переработаны» (означает, что они должны снова следовать за формированием в xxx дней). Мне удалось это сделать, но мой запрос всегда показывает всю сформированную ими работу, но мне нужен только самый последний, чтобы правильно рассчитать, когда их нужно «переработать»:
Вот мой запрос:
select ATR_NOM as 'Last name',
ATR_PRENOM as 'First name',
TME_LIBELLE as 'Session',
TME_ID as 'Session ID',
SSN_DATE_DEBUT as 'Begenning formation date',
TME_RECYCLAGE_DELAI as 'Recycling limit in month',
DATEADD(mm, TME_RECYCLAGE_DELAI, SSN_DATE_DEBUT) as 'Date limit for recycling'
from INSCRIPTION
join SESSION on SSN_ID = INS_SSN_ID
join ACTEUR on INS_ATR_ID = ATR_ID
join THEME on SSN_TME_ID = TME_ID
--Only formation that requires recycling
where TME_RECYCLAGE_ACTIF =1
--Only after the current day
and DATEADD(mm, TME_RECYCLAGE_DELAI, SSN_DATE_DEBUT) > SYSDATETIME()
order by ATR_NOM
И я получаю:
Результат
Но посмотрите на строки 2 и 3: один и тот же человек дважды проводил одну и ту же сессию, в 2017 и 2018 годах. Я не хочу, чтобы появился 2017 год, потому что утилизация уже была проведена в 2018 году. Я хочу только результат 2018 года (строка 3), но я не могу понять, как это сделать. И это касается всех людей в БД, а не только этого человека.