使用date_trunc自定义一周的范围

时间:2019-09-24 01:46:13

标签: sql amazon-redshift

我已经尝试了几个小时了,写一个date_trunc语句供小组使用,我的一周从星期五开始,到下一个星期四结束。

类似

SELECT
DATE_TRUNC(...) sales_week,
SUM(sales) sales
FROM table
GROUP BY 1
ORDER BY 1 DESC

哪些将返回上一整周(按这些标准)的结果,即09年9月13日。

3 个答案:

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