我已经尝试了几个小时了,写一个date_trunc
语句供小组使用,我的一周从星期五开始,到下一个星期四结束。
类似
SELECT
DATE_TRUNC(...) sales_week,
SUM(sales) sales
FROM table
GROUP BY 1
ORDER BY 1 DESC
哪些将返回上一整周(按这些标准)的结果,即09年9月13日。
答案 0 :(得分:1)
您可以减去4天,然后再添加4天:
SELECT DATE_TRUNC(<whatever> - INTERVAL '4 DAY') + INTERVAL '4 DAY' as sales_week,
SUM(sales) as sales
FROM table
GROUP BY 1
ORDER BY 1 DESC
答案 1 :(得分:0)
表达式
select current_date - cast(cast(7 - (5 - extract(dow from current_date)) as text) || ' days' as interval);
应始终为您提供上一个星期五的日期。
答案 2 :(得分:0)
如果有任何可能的数据缺口(可能是细粒度的细分,而不仅仅是每周),则可以生成一组自定义周,然后加入该周:
drop table if exists sales_weeks;
create table sales_weeks as
with
dates as (
select generate_series('2019-01-01'::date,current_date,interval '1 day')::date as date
)
,week_ids as (
select
date
,sum(case when extract('dow' from date)=5 then 1 else 0 end) over (order by date) as week_id
from dates
)
select
week_id
,min(date) as week_start_date
,max(date) as week_end_date
from week_ids
group by 1
order by 1
;