Как проверить, нет ли даты в нескольких диапазонах? - PullRequest
0 голосов
/ 13 октября 2018

У меня есть таблица под названием «Здания».В таблице приведены диапазоны дат, когда здания были активны.Идентификаторы для зданий иногда дублируются.Используя TSQL, я хочу получить все отдельные здания, которые не были активны в этот день (20181013), но я понятия не имею, как.Не могли бы вы мне помочь?В идеале, то, что я должен получить, было бы зданиями нет.2 и 3.

Здания:

+-------------+--------+-------------+-----------+
| Building_ID | LineID | Active_from | Active_to |
+-------------+--------+-------------+-----------+
|           1 |      1 |    20170101 |  20190101 |
|           2 |      1 |    20170203 |  20170903 |
|           2 |      2 |    20170904 |  20171231 |
|           2 |      3 |    20180101 |  20180910 |
|           2 |      4 |    20181101 |  20181231 |
|           3 |      1 |    20170101 |  20180631 |
|           3 |      2 |    20190101 |  20200101 |
|           4 |      1 |    20180101 |  20180631 |
|           4 |      2 |    20180701 |  20190101 |
+-------------+--------+-------------+-----------+

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Это можно записать прямо:

SELECT DISTINCT Building_ID
FROM Buildings b
WHERE NOT EXISTS (
  SELECT * FROM Buildings
  WHERE '20181013' BETWEEN Active_from AND Active_to
    AND Building_ID = b.Building_ID)
0 голосов
/ 13 октября 2018
with
    cte
as
(
    select
        Building_ID
    from
        [Your_Table]
    where
        '20181013' between Active_from and Active_to
)
select
distinct
    Building_ID
from
    [Your_Table] yt
where
    Building_ID not in
    (
        select
            Building_ID
        from
            cte
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...