在SQL中比较相同组的2个时间段

时间:2015-03-16 01:29:16

标签: sql postgresql sqlalchemy

我试图汇总一些数据,按特定列排序,然后将相同数据与另一个时间段(例如上周)进行比较。

一个例子是,本周点击次数最多的网站:

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个单独的查询?

1 个答案:

答案 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;