Найти период вхождения значения в таблицу - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть таблица со следующими данными.

+------------+---------+
|   Date     | Version |
+------------+---------+
| 1/10/2019  |       1 |
| ....       |         |
| 15/10/2019 |       1 |
| 16/10/2019 |       2 |
| ....       |         |
| 26/10/2019 |       2 |
| 27/10/2019 |       1 |
| ....       |         |
| 30/10/2019 |       1 |
+------------+---------+

Мне нужно найти период появления для версии в таблице. Например: предположим, что мне нужно получить подробности о версии 1, которые присутствуют с 10 января 2009 года по 15 октября 2009 года и с 27 октября 2010 года по 30 октября 2009 года. Как я могу запросить базу данных для такого результата? Я пробовал много способов, но не смог получить желаемый результат. Я даже сомневаюсь, что это возможно с помощью запроса! Любые входы высоко ценятся.

Ожидаемый результат:

+---------+-------------+-------------+
| Version | Period from |  Period To  |
+---------+-------------+-------------+
|       1 | 1/10/2019   | 15/10/2019  |
|       2 | 16/10/2019  | 26/10/2019  |
|       1 | 27/10/2019  | 30/10/2019  |
+---------+-------------+-------------+

1 Ответ

0 голосов
/ 12 ноября 2019

Это вопрос о пробелах и островах.

Попробуйте это

DECLARE @SampleData TABLE ( [Date] DATE, [Version] INT)

INSERT INTO @SampleData ([Date], [Version])
VALUES
    ('01-10-2019', 1), ('02-10-2019', 1), ('15-10-2019', 1),
    ('16-10-2019', 2), ('17-10-2019', 2),('26-10-2019', 2),
    ('27-10-2019', 1), ('28-10-2019', 1), ('30-10-2019', 1)


SELECT
    Y.[Version]
    ,PeriodFrom = MIN(Y.[Date])
    ,PeriodTo   = MAX(Y.[Date])
FROM(
    SELECT 
        X.[Version]
        ,X.[Date]
        ,ISLAND = RN-ROW_NUMBER()OVER( PARTITION BY X.[Version] ORDER BY X.[Date])
    FROM(
        SELECT
             RN=ROW_NUMBER()OVER( ORDER BY S.[Date])
            ,S.[Date]
            ,S.[Version]
        FROM
            @SampleData S
    ) X
) Y
GROUP BY
    Y.[Version], Y.ISLAND
ORDER BY
    PeriodFrom

Вывод

Version PeriodFrom  PeriodTo
1       2019-10-01  2019-10-15
2       2019-10-16  2019-10-26
1       2019-10-27  2019-10-30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...