Недельный базис событий - PullRequest
0 голосов
/ 10 января 2019

Я получил исходную таблицу в виде:

event   start   end
event1  21/01/2019  15/02/2019
event2  01/01/2019  08/01/2019
event3  15/01/2019  13/02/2019
event4  07/01/2019  18/03/2019

То, чего я пытаюсь добиться, - это еженедельная сводка событий, которые происходили в каждую конкретную неделю года. Вот так:

week    events
1   1
2   2
3   2
4   3
...

Поскольку я совершенно невежественен, любой намек на то, как это сделать, очень ценится. Я использую PostgreSQL 9.6.

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Во-первых, я предупреждаю вас, чтобы вы оставили год вне расчета. Такие диапазоны дат обычно выходят за пределы года, поэтому вам следует быть осторожным.

Я думаю, что наиболее эффективный способ сделать такой расчет - это подсчитать "входы" и "выходы" из дат. Это включает в себя разделение данных, а затем повторную агрегацию.

Запрос выглядит так:

with el as (
      select id,
             date_trunc('week', startdate) as wk,
             1 as inc
      from eventlog
      union all
      select id,
             date_trunc('week', enddate) + interval '1 week' as wk,
             -1 as inc
      from eventlog
     )
select wk,
       sum(inc) as week_net,
       sum(sum(inc)) over (order by wk) as active_in_week
from el
group by wk
order by wk;

Здесь - это dbfiddle.

0 голосов
/ 10 января 2019

Вы должны использовать оконные функции следующим образом:

select distinct w1.weeknum, 
    count(e1.id) over(partition by w1.weeknum) as eventqty
from (select generate_series(1, 52, 1) AS weeknum) w1
left join eventlog e1
on extract(week from startdate)<=w1.weeknum and extract(week from enddate)>=w1.weeknum

Здесь - рабочий пример.

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