Вы ищете простое выражение case
- которое является эквивалентом SQL для блока if...then...else
- в сочетании с оконной функцией для поиска значений min
Date1
и Date2
для полного идентификатора'сравнение.
В вашем случае это выглядит так:
declare @t table(ID int, Date1 date, Date2 date);
insert into @t values
(100, '20180501', '20180415')
,(100, '20180501', '20180115')
,(101, '20180501', '20180415')
,(101, '20180501', '20180620')
,(101, '20180501', '20180117')
,(101, '20180501', '20180714')
,(105, '20180501', '20180525');
select ID
,Date1
,Date2
,case when min(Date2) over (partition by ID) < min(Date1) over (partition by ID)
then 'B'
else case when Date2 >= Date1
then 'A'
else 'B'
end
end as Result
from @t;
Вывод:
+-----+---------------------+---------------------+--------+
| ID | Date1 | Date2 | Result |
+-----+---------------------+---------------------+--------+
| 100 | 01.05.2018 00:00:00 | 15.04.2018 00:00:00 | B |
| 100 | 01.05.2018 00:00:00 | 15.01.2018 00:00:00 | B |
| 101 | 01.05.2018 00:00:00 | 15.04.2018 00:00:00 | B |
| 101 | 01.05.2018 00:00:00 | 20.06.2018 00:00:00 | B |
| 101 | 01.05.2018 00:00:00 | 17.01.2018 00:00:00 | B |
| 101 | 01.05.2018 00:00:00 | 14.07.2018 00:00:00 | B |
| 105 | 01.05.2018 00:00:00 | 25.05.2018 00:00:00 | A |
+-----+---------------------+---------------------+--------+