You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redshift中财年起始为2020/12/26周六时fisc_day_of_wk计算方法

Redshift 财年日维度字段计算调整方案

你需要将原SQL中fisc_day_of_wk字段的默认ISO周几计算逻辑,替换为基于财年起始日的差值取模逻辑,即可满足需求。

修改后完整SQL

select 
  cast(NEW_SEQ AS INTEGER) as calndr_key
, date (datum)    as calndr_dt
-- 替换原fisc_day_of_wk计算逻辑
, CASE MOD(DATEDIFF(day, '2020-12-26'::date, datum),7) 
    WHEN 0 THEN 7 
    ELSE MOD(DATEDIFF(day, '2020-12-26'::date, datum),7) 
  END as fisc_day_of_wk
, CAST(to_char(datum, 'DD') AS INTEGER ) as fisc_day_of_mth
, CAST(to_char(datum, 'DDD') AS INTEGER ) as fisc_day_of_yr
-- 若需要财周也匹配财年规则,可替换为以下计算逻辑,原WW为自然周不符合要求
, FLOOR(DATEDIFF(day, '2020-12-26'::date, datum)/7) +1 as fisc_wk
, CAST(to_char(datum, 'MM') AS INTEGER ) as fisc_mth
, CAST(to_char(datum, 'YYYYMM') AS INTEGER) as fisc_mth_num
-- 财周开始日期(每周周六)
, datum - MOD(DATEDIFF(day, '2020-12-26'::date, datum),7) as fisc_wk_strt_dt
-- 财周结束日期(每周周五)
, datum - MOD(DATEDIFF(day, '2020-12-26'::date, datum),7) +6 as fisc_wk_end_dt
, date (date_trunc('Month', datum)) as fisc_mth_strt_dt
, last_day(datum) as fisc_mth_end_dt
   FROM
(    SELECT DATEADD('day', SEQ, MAX_DATE) AS datum
                ,(MAX_SEQ + SEQ)  AS NEW_SEQ
   FROM (SELECT ROW_NUMBER() OVER () AS SEQ FROM ads_devl.dim_calndr LIMIT 365) n,
   (SELECT MAX(calndr_key) AS MAX_SEQ FROM ads_devl.dim_calndr) ,
   (SELECT MAX(calndr_DT) AS MAX_DATE FROM ads_devl.dim_calndr where calndr_yr < '2021')
  ORDER BY 1)

逻辑说明

  • 以财年起始日2020-12-26(周六)为基准,计算当前日期与基准日的间隔天数
  • 间隔天数对7取模后,结果为0时返回7(对应财年首日及后续每一周的周六),其余结果直接返回,完全匹配「首日=7、后续依次赋值1/2/3…」的循环规则
  • 若后续需要扩展多财年计算,只需将固定基准日'2020-12-26'::date替换为对应日期所属财年的起始日计算逻辑即可

内容的提问来源于stack exchange,提问作者Mala Kumari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:24:03