在snowflakeSQL中,我有一个包含通胀因素的表,按年计算,如下所示:

Year Inflation
2000 1.1 %
2001 1.3 %
2002 -1.3 %
2003 2.3 %

我想制作一张表,列出从2000年起每年的总通货inflating 率

谢谢!

有一个古老的、类似的问题here,但我想不出该如何改编

**更新**

我try 了建议的解决方案,但不起作用:

test

推荐答案

您可以使用SQL Window Function和一些算术技巧来实现这一点.简而言之,将SUM()LOG()EXP()函数组合在一起就可以得到您想要的结果.

这个 idea 背后的算术诀窍是 A X B=exp(log(exp(1),A)+log(exp(1),B))

我们使用基于窗口的sum()函数来计算到X年的累积对数(通货inflating 率)值,然后应用exp()来获得原始的累积通货inflating 率.

请参见以下代码作为示例(在snowflakeSQL语法中,在代码中使用特定于snowflake的ln()函数):

select 
   record_year, 
   inflation_rate, 
   round(exp(SUM(ln(1+inflation_rate)) OVER (ORDER BY record_year)) -1,3)  as cum_inflation_rate
FROM inflation_data

VERIFIED RUNNING EXAMPLE SQLFIDDLE LINK

输出示例:

record_year inflation_rate cum_inflation_rate
2000 0.011 0.011
2001 0.013 0.024
2002 -0.013 0.011
2003 0.023 0.034

Sql相关问答推荐

SQL:创建查询以添加减少的总数

从2个表中查找每条记录的唯一最接近的日期匹配

从列的不同值创建列

LAG函数通过丢弃空值返回前一行

如何退回当年的所有参赛作品?""

基于多个字段删除Access中的重复记录,同时保留最低优先级

删除MariaDB数据库中的JSON数据

我怎样才能得到列值对应的最大值在另一个?

动态组/转置

Select 列组(按同一表格中的另一列分组)Laravel 10

通过UPDATE SELECT更新表时出现问题

如何创建snowflake表(动态查找数据类型)并从阶段加载(AWS S3)?

从输出中删除 jsonb_build_object

POSTGRES to_timestamp() 假定 UTC 字符串为本地时间

Postgresql 具有相似行为和模式行为的问题

如何在第二个 INSERT 中使用第一个 INSERT 自动生成的 ID

计数时如何为所有时间间隔返回 0 而不是什么都不返回

CURRENT_ROW 窗口框架上的 SQL 滞后

具有关联统计信息 N+1 的 Rails 6 索引资源?

Postgres 窗口函数未按预期工作