sql - 一段时间内的价值频率(例如上周,上个月,去年)

时间:2018-05-24 20:05:21

标签: sql postgresql

我有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 :(得分:0)

没有必要创建一个额外的表,尽管你必须自己加入表 - 至少是它自己的分组版本。

在第二个查询中,只需用第一个查询替换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

答案 1 :(得分:0)

可以在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
相关问题