Пометка в SQL - PullRequest
       14

Пометка в SQL

0 голосов
/ 27 сентября 2018

Я хочу пометить пользователей на основе условия в SQL.Как это можно сделать в sql?

Например: в таблице ниже, если какой-либо идентификатор date2> = date1, то он должен помечаться как «A», иначе «B».Однако если date2 = date1 следует пометить как «B».Как этого добиться в SQL?

Ожидается результат, как показано в столбце результатов

ID  Date1           Date2            Result
100 15 March 2018   15 April 2018    B 
100 15 March 2018   15 January 2018  B
101 15 March 2018   15 April 2018    B
101 15 March 2018   20 June 2018     B
101 15 March 2018   17 January 2018  B
101 15 March 2018   14 July 2018     B
105 15 March 2018   25 May 2018      A

1 Ответ

0 голосов
/ 27 сентября 2018

Вы ищете простое выражение 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      |
+-----+---------------------+---------------------+--------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...