我有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
有没有更好的方法可以在不创建新表或将原始表连接到自身的情况下执行此操作?谢谢!
答案 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