sql - частота значений за период времени (например, на прошлой неделе, в прошлом месяце, в прошлом году) - PullRequest
0 голосов
/ 24 мая 2018

У меня есть 2 соответствующих столбца, имя и дата.Я заинтересован в создании новых столбцов, которые отслеживают, сколько раз было записано имя за последнюю неделю, в прошлом месяце и в прошлом году.

Я делаю это неуклюже, создавая новую таблицу для каждого разапериод, например:

create table past_week as
select name, date, count(*) as past_week
from original_table
where date between date - interval '7 days' and date
group by name, date
order by date

Затем я объединяю эту таблицу с моей исходной таблицей:

select * 
from original_table o
    left join past_week pw on o.name = p.name and o.date = pw.date

Есть ли лучший способ сделать это без создания новых таблиц или соединения с исходной таблицей с помощьюсам?Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

В SELECT можно использовать подзапрос с одним значением:

select name, date,
(
  select count(*)
    from original o2
   where o2.name = o1.name
     and o2.date <@ daterange(o1.date - 7, o1.date)
) as past_week
from original o1
group by 1,2
order by 1,2
0 голосов
/ 24 мая 2018

Нет необходимости создавать дополнительную таблицу, хотя вам обязательно нужно объединить таблицу с самой собой - хотя бы сгруппированную версию самой себя.

Во втором запросе просто замените вашу таблицу past_week напервый запрос, как в:

select * 
  from original_table o
  left join (
    select name, date, count(*) as past_week
      from original_table
      where date between date - interval '7 days' and date
      group by name, date
    ) pw on o.name = p.name and o.date = pw.date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...