微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

snwoflake 在自定义期间滚动季度的奇怪日期问题

如何解决snwoflake 在自定义期间滚动季度的奇怪日期问题

我无法使用自定义周期表计算滚动季度:

期间
2017-06-01
2020-12-01
2020-11-01

滚动月份和年份正在起作用

  DATEADD(MONTH,-2,"Period") AS "Period M-2"
  DATEADD(YEAR,-1,"Period") AS "Period Y-1"

当我使用current_date()查询季度时,这是工作

SELECT DATE_Trunc('MONTH',DATEADD(QUARTER,current_date()))

当我用

查询我的表时
DATEADD(QUARTER,"Period")  AS "Period Q-1"

我有以下结果(似乎计算的是 M-3 而不是季度):

期间 Q-1 期
2017-08-01 2017-05-01
2017-09-01 2017-06-01
2017-10-01 2017-07-01

重现问题:

WITH input AS (select $1 "Period" from values 
('2017-08-01'),('2017-09-01'),('2017-10-01'),('2017-05-01'),('2020-11-01'),('2017-04-01'),('2020-10-01'),('2020-10-01')
)
SELECT "Period",DATE(DATEADD(MONTH,"Period" )) AS  "Period M-1","Period" )) AS  "Period M-2",DATE(DATEADD(QUARTER,"Period" )) AS  "Period Q-1","Period" )) AS  "Period Q-2",DATE(DATEADD(YEAR,"Period" )) AS  "Period Y-1","Period" )) AS  "Period Y-2"
FROM input

更新: 这是使用这个公式,谢谢你的解释@Francesco。

  DATE_Trunc('MONTH',DATEADD('DAY',DATE_Trunc('QUARTER',"Period"))) AS "Period Q1"

但第 2 季度和第 3 季度仍然无效。

解决方法

注意

DATEADD(QUARTER,-<value>,<date> )

相当于

DATEADD(MONTH,<date> )

而以下返回对应于输入时间戳的季度第一天午夜的时间戳(参见 https://docs.snowflake.com/en/sql-reference/functions/date_trunc.html

DATE_TRUNC('QUARTER',<date> )

因此,作为示例,以下内容

SELECT DATE_TRUNC('QUARTER',DATEADD(QUARTER,-1,'2021-03-29'));

正在返回 2020-10-01 00:00:00.000

如果目标是返回前几个季度的上个月的第一天(例如期间 =2020-04-01,则 Q-1 = 2020-03-01,Q-2 = 2019-12- 01,Q-3= 2019-09-01):

SELECT 
    DATEADD(MONTH,1,DATE_TRUNC('QUARTER',<date>))
                                )
                   ) AS "Q-1",DATEADD(MONTH,-2,<date>))
                                )
                   ) AS "Q-2",-3,<date>))
                                )
                   ) AS "Q-3"
;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。