SQL-我如何使用窗口函数跨分区进行乘积/乘法

标签 sql amazon-redshift dbt

input我由以下列组成:time , UseID ,和value 。我想要plt列作为连续数字的乘积。

我知道 SUM 的存在窗口函数对行应用求和,但如何处理乘积?

<表类=“s-表”> <标题> 时间 用户ID 值 plt <正文> t1 116C123 一个 一个 t2 116C123 b a*b t3 116C123 c a*b*c t4 116C123 d a*b*c*d t2 116C111 a1 a1 t3 116C111 b1 a1*b1 t4 116C111 c1 a1*b1*c1

注意:输出应该在实数域内。

最佳答案

您可以使用对数!

log(x) + log(y) = log(x*y) ==> x*y = exp(log(x) + log(y))

所以你的查询变成:

select
    time,
    UseID,
    value,
    exp(
        sum(ln(value)) over (
            partition by UseID
            order by time asc
            rows between unbounded preceding and current row
        )
    ) as plt
from your_table

关于SQL-我如何使用窗口函数跨分区进行乘积/乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72225338/

相关文章:

mysql如果idx在另一个表中存在则返回true

php - 我如何在我的数据库中插入或更新一个条目,如果更新我如何添加到现有值

mysql - 如何统计某天内的行数

sql - 使用 dbt 从雪花 information_schema 检索表名称

python - DBT 运行(或特定模型)完成后如何运行 python 代码?

sql - dbt 宏 - 使用 *args/**kwargs

mysql - 开始按特定行条件进行查询

sql - 在 SSIS 表达式中,我们如何只存储 getdate() 中的日期

python - 用户无权担任 IAM 角色

sql - 根据最近的状态/属性值检索记录