如何在 Snowflake 中选择每第 n 个日期?

问题描述 投票:0回答:1

假设我在 Snowflake 中有一个表,其中字段

delivery_date
,格式为 DATETIME,而
daily_volume
格式为 INT。
Daily_volume
遵循每 10 天重复一次的模式。

我如何查询此表以比较今天的

daily_volume
与 10 天周期中同一点的历史平均值?

我的第一直觉是做类似的事情:

WHERE MOD(current_date(),10) = MOD(delivery_date,10)

然后取平均值,但是Snowflake似乎没有任何简单的方法将DATETIME转换为INT,以便我可以使MOD函数工作。

ChatGPT 建议了类似的内容

WHERE MOD(DATEDIFF('days', '1970-01-01'::DATE, current_date), 10) 
   = MOD(DATEDIFF('days', '1970-01-01'::DATE, delivery_date), 10)

我猜这可行,但我猜还有更好的方法吗?

sql date snowflake-cloud-data-platform modulo
1个回答
0
投票

TIME_SLICE

计算时间“片段”的开始或结束,其中片段的长度是标准时间单位(分钟、小时、天等)的倍数。

此函数可用于计算数据可分类到的固定宽度“桶”的开始和结束时间。

SELECT 
    TIME_SLICE("DATE", 10, 'DAY', 'START') AS START_OF_SLICE
   ,TIME_SLICE("DATE", 10, 'DAY', 'END') AS END_OF_SLICE
FROM tab
© www.soinside.com 2019 - 2024. All rights reserved.