我有一個(說)用戶的大表以及他們訪問各種網頁的情況。該表的一個例子是:在過去的三週時間段內獲取總數
schema.page_views
date| user_id| webpage|
----------+---------+----------------+
01/05/2012|aaaaaaaaa|www.example1.com|
01/06/2012|aaaaaaaaa|www.example2.com|
01/06/2012|ababababa|www.example1.com|
...
01/05/2013|aaaaaaaaa|www.example2.com|
01/05/2013|ababababa|www.example1.com|
03/05/2013|aaaaaaaaa|www.example2.com|
另外,我有一個日曆查找表:
schema.weeks
week_number| begin_date| end_date|year|
-----------+-----------+-----------+----+
18| 2012-04-23| 2012-04-30|2012|
17| 2012-04-15| 2012-04-22|2012|
16| 2012-04-08| 2012-04-14|2012|
我最終會由這兩個表喜歡的是一個後置三個周累計的頁面訪問量。更具體地講,如果我今天發出此查詢,我想沿着線的東西:
webpage| 1-3| 4-6| 7-9| 10-12|
----------------+-------+-------+-------+-------+
www.example1.com| 124875| 175682| 168542| 159780|
www.example2.com| three week period numbers |
其中「1-3」是指最近的三個星期裏,「4-6」是指四六個星期前,等
到目前爲止,我已經得到了各個網站和每週每週的總頁面瀏覽,如下:
-- join to get begin and end_dates
with t1 as (
select a.*, b.* from schema.page_views a
join schema.weeks b
on a.date between b.begin_date and b.end_date),
-- now aggregate per week
weekly_vol as (
select webpage, year, week_number, begin_date, end_date,
count(*) volume
from t1
group by 1, 2, 3, 4, 5)
select * from weekly_vol limit 1;
給出,例如,
webpage| year| week_number| begin_date| end_date| volume|
----------------+-----+------------+-----------+-----------+-------+
www.example1.com| 2012| 18| 2012-04-23| 2012-04-30| 41871|
用這樣的表格,我怎麼能到我想要的桌子?我曾想過用on a.week_number between b.week_number and b.week_number + 2
之類的東西加入它,但我不認爲這個想法在過去的12周包括新的一年的開始時將起作用。
有沒有人做過類似的事情?如果是的話,你是如何處理這個問題的?對於不同方法的建議,我們將同樣讚賞。
追溯每年或所有年份的3周總和? –
@vkp我真的很喜歡今年和去年的四個三週期間(如OP),但如果我知道如何去做今年,我認爲它不會有太大的不同去年也是如此。 – user4601931
周表在這種情況下是不相關的,因爲結果取決於你運行它的日子..這個假設是正確的嗎? –