首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建一个计算字段来返回到FISCAL_QUARTER结束前的剩余天数?

如何创建一个计算字段来返回到FISCAL_QUARTER结束前的剩余天数?
EN

Stack Overflow用户
提问于 2021-06-25 03:06:39
回答 2查看 56关注 0票数 0

Current output with no DAYS_LEFT_IN_QUARTER我刚开始使用雪花,我的任务是创建一个日历维度表,以帮助报告每周/每月的/quarterly报告。我对如何返回FISCAL_QUARTER中剩余的天数感到困惑。Q1跨度从2月到4月。

下面附上的是我一直在写的代码,用来生成预测未来14年的日期。

代码语言:javascript
复制
--Set the start date and number of years to produce
SET START_DATE = '2012-01-01';
SET NUMBER_DAYS = (SELECT TRUNC(14 * 365));

--Set parameters to force ISO
ALTER SESSION SET WEEK_START = 1, WEEK_OF_YEAR_POLICY = 1;

  WITH CTE_MY_DATE AS (
    SELECT DATEADD(DAY, SEQ4(), $START_DATE) AS MY_DATE
    
      FROM TABLE(GENERATOR(ROWCOUNT=>$NUMBER_DAYS))  -- Number of days after reference date in previous line
  )
  SELECT 
        MY_DATE::date
        ,YEAR(MY_DATE) AS YEAR
        ,MONTH(MY_DATE) AS MONTH
        ,MONTHNAME(MY_DATE) AS MONTH_ABBREVIATION
        ,DAY(MY_DATE)
        ,DAYOFWEEK(MY_DATE)
        ,WEEKOFYEAR(MY_DATE)
        ,DAYOFYEAR(MY_DATE)
        ,YEAR(ADD_MONTHS(DATE_TRUNC('month', MY_DATE),11)) AS FISCAL_YEAR
        ,CONCAT('Q', QUARTER(ADD_MONTHS(DATE_TRUNC('month', MY_DATE),11))) AS FISCAL_QUARTER
        ,MONTH(ADD_MONTHS(DATE_TRUNC('month', MY_DATE),11)) AS FISCAL_MONTH
        
    
  FROM CTE_MY_DATE
;
EN

回答 2

Stack Overflow用户

发布于 2021-06-25 08:15:53

首先,你的生成器会有间隙,因为SEQx()函数允许有间隙,所以你需要使用SEQx()作为ROW_NUMBER的替代,如下所示:

代码语言:javascript
复制
WITH cte_my_date AS (
    SELECT DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY SEQ4()), $START_DATE) AS my_date
    FROM TABLE(GENERATOR(ROWCOUNT=>$NUMBER_DAYS))  -- Number of days after reference date in previous line
)

和在季度中剩下的天数,是截断为季度的日期,+1季度,日期-天与天的差异:

代码语言:javascript
复制
,DATEDIFF('days', my_date, DATEADD('quarter', 1, DATE_TRUNC('quarter', my_date))) AS days_left_in_quarter
票数 1
EN

Stack Overflow用户

发布于 2021-06-28 18:30:23

这个怎么样?您可以直接将代码复制/粘贴到snowflake中进行测试。

使用last_day()会让它看起来更整洁一些:-)

代码语言:javascript
复制
WITH CTE_MY_DATE AS (
SELECT DATEADD(DAY, SEQ4(), current_date()) AS MY_DATE
  FROM TABLE(GENERATOR(ROWCOUNT=>300)))
SELECT 
    MY_DATE::date
    ,YEAR(last_day(my_date,year)) AS FISCAL_YEAR
    ,concat('Q',quarter(my_date)) AS FISCAL_QUARTER
    ,datediff(d, my_date,  last_day(my_date,quarter))  AS 
DAYS_LEFT_IN_QUARTER
FROM CTE_MY_DATE

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68121498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档