Как рассчитать разницу в дате для всех идентификаторов в Microsoft SQL Server - PullRequest
0 голосов
/ 24 августа 2018

Как я могу проверить, превышает ли разница между датой 1 и датой 2 для каждого удостоверения личности более 6 месяцев? Позвольте мне проиллюстрировать это на примере.

Итак, у меня есть такая таблица:

+----+---------+
| ID |   Y-M   |
+----+---------+
|  1 | 2017-01 |
|  1 | 2017-02 |
|  1 | 2017-10 |
|  2 | 2017-04 |
|  2 | 2017-06 |
|  3 | 2017-06 |
|  4 | 2017-07 |
+----+---------+

И я хочу добавить третий столбец, который говорит «да», если разница между первым и вторым составляет более 6 месяцев. Я хочу сказать «да» только по первому. В случае, если нет даты для сравнения, это также будет да. В любом случае, это будет конечный результат:

+----+---------+------------+
| ID |   Y-M   | Difference |
+----+---------+------------+
|  1 | 2017-01 | No         |
|  1 | 2017-02 | Yes        |
|  1 | 2017-10 | Yes        |
|  2 | 2017-04 | Yes        |
|  2 | 2017-11 | No         |
|  2 | 2017-12 | Yes        |
|  3 | 2017-06 | Yes        |
|  4 | 2017-07 | Yes        |
+----+---------+------------+

Спасибо!

1 Ответ

0 голосов
/ 24 августа 2018

Вы можете использовать lead() и некоторую арифметику даты:

select t.*,
       (case when lead(ym) over (partition by id order by ym) < dateadd(month, 6, ym)
             then 'No' else 'Yes'
        end) as difference
from t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...