Sql Islands и Gaps Merge Смежные записи, если соответствующие поля содержат одинаковые значения - PullRequest
0 голосов
/ 23 октября 2019

Я создал тестовый пример для своей проблемы https://rextester.com/ZRXSQ14415

Каждый должен показывать проблему проще, чтобы объяснить, чего я пытаюсь достичь.

У меня есть списокзаписи по времени, и я хочу объединить непрерывные записи в одну запись.

Каждая запись имеет дату периода, уровни риска и пару флагов. Когда эти риски и флаги одинаковы, записи должны объединяться, когда они различаются, тогда они должны быть отдельной строкой.

На примере Rextester я почти достиг своей цели, однако посмотрите на строки 3 + 4результата.

Чего я хочу добиться, так это чтобы строки 3 + 4 были объединены так, чтобы строка 3

StartDate   End Date    Name     ... ...
17.03.2019  20.03.2019  CPWJ40-A ... ...

Поскольку все флаги и уровни риска одинаковы.

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Этот ответ просто дополняет ответ Серга полным запросом.

SELECT MIN(d.PeriodDate) AS StartDate,
       MAX(d.PeriodDate) AS EndDate,
       ImplicitRisk,
       QcReadyRisk,
       IsQualityControlReady,
       ActivePeriod,
       LocationEventName
FROM
(
    SELECT c.*,
           ROW_NUMBER() OVER (ORDER BY PeriodDate) - ROW_NUMBER() OVER (Partition BY LocationEventId, ImplicitRisk, QCReadyRisk, IsQualityControlReady, ActivePeriod ORDER BY PeriodDate) AS grp
    FROM   tab c
    --order by PeriodDate
    ) d
group by ImplicitRisk, QcReadyRisk, IsQualityControlReady, ActivePeriod, LocationEventName, grp
order by 1

1 голос
/ 23 октября 2019

Измените выражение SEQ на

..
ROW_NUMBER() OVER (ORDER BY PeriodDate) - ROW_NUMBER() OVER (Partition BY ImplicitRisk,QCReadyRisk,IsQualityControlReady,   ActivePeriod ORDER BY PeriodDate) AS SEQ
..

Таким образом, вы получите правильную группировку островков ImplicitRisk,QCReadyRisk,IsQualityControlReady, ActivePeriod.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...