В операторе Select добавьте запись на основе пробелов в датах. - PullRequest
0 голосов
/ 16 января 2020

Вот некоторые примеры данных. В результатах выбора оператора есть пробел. Было бы неплохо взять первую запись StopTime и вторую запись StartTime для создания недостающей записи? Как мне это сделать?

enter image description here

1 Ответ

2 голосов
/ 16 января 2020

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

select 
    StopTime StartTime,
    NextStartTime StopTime, 
    datediff(minute, StopTime, NextStartTime) DurationMin
from (
    select StopTime, lead(StartTime) over(order by StartTime) NextStartTime
    from mytable
) t
where StopTime < NextStartTime

Подзапрос извлекает время следующего запуска каждой записи, используя оконную функцию lead(); затем для каждой записи, за которой следует пробел, внешний запрос генерирует запись, которая заполняет ее.

Затем можно использовать union all, чтобы привести вашу таблицу, с предложением order by для представления:

(
    select coil, StartTime, StopTime, DurationMin from mytable
    union all
    select 
        null, 
        StopTime,
        NextStartTime, 
        datediff(minute, StopTime, NextStartTime) DurationMin
    from (
        select StopTime, lead(StartTime) over(order by StartTime) NextStartTime
        from mytable
    ) t
    where StopTime < NextStartTime
)
order by StartTime

Демонстрация DB Fiddle с вашими данными выборки :

coil      | StartTime               | StopTime                | DurationMin
:-------- | :---------------------- | :---------------------- | ----------:
27020-100 | 2019-09-27 10:05:00.000 | 2019-09-27 18:30:00.000 |          36
<em>null</em>      | 2019-09-27 18:30:00.000 | 2019-09-27 20:06:00.000 |          96
27020-100 | 2019-09-27 20:06:00.000 | 2019-09-27 20:41:00.000 |          36
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...