雪花 SQL Range between interval
Snowflake SQL Range between interval
我输入 table 具有以下结构 -
ID、日期、值。
我正在尝试计算数据集中每条记录在过去 10 个月内的最小值。为此,我正在使用 range between interval
.
下面的代码在 SPARK SQL 中工作正常,但由于某些原因我不能在 snowflake SQL 中使用相同的代码。感谢有人可以指导我 如何在 Snowflake SQL.
中将以下代码修改为 运行
select *,
min(avg_Value) OVER (
PARTITION BY ID
ORDER BY CAST(Date AS timestamp)
RANGE BETWEEN INTERVAL 10 MONTHS PRECEDING AND CURRENT ROW) as min_value_in_last_10_months
from
(
select ID,
Date,
avg(Value) as avg_Value
from table
group by ID,Date
)
Snowflake 支持横向连接,所以一种方法是:
select . . .
from t cross join lateral
(select avg(t2.value) as avg_value
from t t2
where t2.id = t.id and
t2.date >= t.date - interval 10 month and
t2.date <= t.date
) a
如果你的结果中包含所有月份 table 那么你也可以试试这个
select *,
min(avg_Value) OVER (
PARTITION BY ID
ORDER BY CAST(Date AS timestamp)
ROWS BETWEEN 9 PRECEDING AND CURRENT ROW) as min_value_in_last_10_months
from
(
select ID,
Date,
avg(Value) as avg_Value
from table
group by ID,Date
)
我输入 table 具有以下结构 - ID、日期、值。
我正在尝试计算数据集中每条记录在过去 10 个月内的最小值。为此,我正在使用 range between interval
.
下面的代码在 SPARK SQL 中工作正常,但由于某些原因我不能在 snowflake SQL 中使用相同的代码。感谢有人可以指导我 如何在 Snowflake SQL.
中将以下代码修改为 运行select *,
min(avg_Value) OVER (
PARTITION BY ID
ORDER BY CAST(Date AS timestamp)
RANGE BETWEEN INTERVAL 10 MONTHS PRECEDING AND CURRENT ROW) as min_value_in_last_10_months
from
(
select ID,
Date,
avg(Value) as avg_Value
from table
group by ID,Date
)
Snowflake 支持横向连接,所以一种方法是:
select . . .
from t cross join lateral
(select avg(t2.value) as avg_value
from t t2
where t2.id = t.id and
t2.date >= t.date - interval 10 month and
t2.date <= t.date
) a
如果你的结果中包含所有月份 table 那么你也可以试试这个
select *,
min(avg_Value) OVER (
PARTITION BY ID
ORDER BY CAST(Date AS timestamp)
ROWS BETWEEN 9 PRECEDING AND CURRENT ROW) as min_value_in_last_10_months
from
(
select ID,
Date,
avg(Value) as avg_Value
from table
group by ID,Date
)