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

How can I select every nth date in Snowflake?

提问人:nwhaught 提问时间:10/31/2023 最后编辑:nwhaught 更新时间:10/31/2023 访问量:45

问:

假设我在 Snowflake 中有一个带有字段的表,格式为 DATETIME,格式为 INT。 遵循每 10 天重复一次的模式。delivery_datedaily_volumeDaily_volume

我将如何查询此表以将今天的 ,与 10 天周期中同一点的历史平均值进行比较?daily_volume

我的第一反应是做这样的事情:

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 日期 snowflake-cloud-data-platform 模数

评论


答:

1赞 Lukasz Szozda 10/31/2023 #1

TIME_SLICE

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

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

SELECT 
    TIME_SLICE(delivery_date, 10, 'DAY', 'START') AS START_OF_SLICE
   ,TIME_SLICE(delivery_date, 10, 'DAY', 'END') AS END_OF_SLICE
FROM tab

编辑:

date - '1970-01-01'::DATE- 返回天数

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

评论

0赞 nwhaught 10/31/2023
我不认为这会让我到达那里......这将告诉我一天处于哪个 10 天的路段,但不会告诉我一天落在周期的哪个位置。除此之外,我还需要做一些日期减法才能得到我想要的东西,对吧?