我试图汇总一些数据,按特定列排序,然后将相同数据与另一个时间段(例如上周)进行比较。
一个例子是,本周点击次数最多的网站:
url total hits
www.a.com 10,000
www.b.com 9,0000
www.e.com 5,000
这是按点击顺序排列的,但我想获得相同网址的点击次数,但是在不同的时间段内,例如:
url total-hits total-hits (last week)
www.a.com 10,000 8,000
www.b.com 9,0000 6,000
www.e.com 5,000 6,000
此数据的表格布局是页面命中列表,例如:
hit_table:
id timestamp url
1 1426470088 www.a.com
1 1426470000 www.b.com
1 1426468015 www.c.com
1 1426467000 www.b.com
....
是否可以在单个SQL查询中执行此操作,或者我是否需要为此进行2个单独的查询?
答案 0 :(得分:1)
你可以使用条件聚合做你想做的事。你的问题对于表的结构非常模糊,但这里的想法是:
select url,
sum(case when timestamp >= current_date - interval '7 day' then 1 else 0 end) as ThisWeek,
sum(case when timestamp >= current_date - interval '14 day' and
timestamp < current_date - interval '7 day'
then 1 else 0 end) as ThisWeek
from table t
group by url;