Групповые записи для почасового подсчета - PullRequest
0 голосов
/ 20 марта 2019

Моя цель - создать почасовой подсчет для записей, которые имеют дату / время начала и дату / время окончания. Реальные записи никогда не превышают 24 часа от начала до конца, но во много раз меньше. Это работает, если я сбрасываю каждую запись с моих «часов», в которых есть 24 слота для каждой даты вплоть до «сегодня». Но запуск может длиться вечно, поскольку в день может быть 2000 записей.

Вот деталь, которую я получаю:

enter image description here

Дата / время, выделенные зеленым цветом, - это то, что я хочу использовать в качестве даты / времени начала для группы. Синяя дата / время - это то, что я хочу в качестве даты окончания группы.

Как это:

enter image description here

Я попытался разбить на части, но, поскольку на втором рисунке 4-й ряд имеет те же значения, что и 2-й ряд, он группирует их вместе, хотя между ними есть промежуток времени - третий ряд.

1 Ответ

0 голосов
/ 20 марта 2019

Это проблема пробелов и островков. Начальная и конечная даты совпадают в соседних строках, поэтому разница в количестве строк кажется достаточной:

select id, min(startdatetime), max(enddatetime),
       d_id, class, location
from (select t.*,
             row_number() over (partition by id order by startdatetime) as seqnum,
             row_number() over (partition by id, d_id, class, location) as seqnum_2
      from t
     ) t
group by id, d_id, class, location, (seqnum - seqnum_2);
order by id, min(startdatetime);
...