困難在於,您想要獲得的七天週期不是週一開始的常規周。 因此,您不能使用標準函數來獲取基於日期的星期編號,並且必須使用您自己的星期生成器使用generate_series()
。
實施例的數據:
create table sessions (user_name text, time_spent int, session_date timestamp);
insert into sessions values
('u1', 10, '2015-08-15'),
('u1', 20, '2015-08-19'),
('u1', 15, '2015-08-28'),
('u1', 16, '2015-09-06');
查詢針對任意選擇的期間從2015年8月15日到2015年9月6日:
with weeks as (
select d::date start_date, d::date+ 6 end_date
from generate_series('2015-08-15', '2015-09-06', '7d'::interval) d
)
select w.start_date, w.end_date, coalesce(sum(time_spent), 0) total
from weeks w
left join (
select start_date, end_date, coalesce(time_spent, 0) time_spent
from weeks
join sessions
on session_date between start_date and end_date
where user_name = 'u1'
) s
on w.start_date = s.start_date and w.end_date = s.end_date
group by 1, 2
order by 1;
start_date | end_date | total
------------+------------+-------
2015-08-15 | 2015-08-21 | 30
2015-08-22 | 2015-08-28 | 15
2015-08-29 | 2015-09-04 | 0
2015-09-05 | 2015-09-11 | 16
(4 rows)
你通過'T1的意思(2015-08 -15)'(爲什麼** t1 **在這裏)'日期列'中的值? –
我編輯了它...是啊t1可以是任何時間戳(我已經寫在括號中的示例) – Jayant
t1可以是任何時間戳.... 2015-08-15是一個例子...請原諒我沒有正確澄清它 – Jayant