提问人:nwhaught 提问时间:10/31/2023 最后编辑:nwhaught 更新时间:10/31/2023 访问量:45
如何在 Snowflake 中选择每 n 个日期?
How can I select every nth date in Snowflake?
问:
假设我在 Snowflake 中有一个带有字段的表,格式为 DATETIME,格式为 INT。 遵循每 10 天重复一次的模式。delivery_date
daily_volume
Daily_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)
我猜哪个有效,但我猜有更好的方法?
答:
1赞
Lukasz Szozda
10/31/2023
#1
计算时间“切片”的开始或结束,其中切片的长度是标准时间单位(分钟、小时、天等)的倍数。
此函数可用于计算可对数据进行分类的固定宽度“桶”的开始和结束时间。
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 天的路段,但不会告诉我一天落在周期的哪个位置。除此之外,我还需要做一些日期减法才能得到我想要的东西,对吧?
上一个:如何跳过一天而不是闰年
下一个:根据余额将释放分配给反向释放
评论