【问题标题】:Where clause inside an over clause in postgrespostgres中over子句中的where子句
【发布时间】:2014-04-04 16:09:21
【问题描述】:

是否可以在如下子句中使用 where 子句?

SELECT SUM(amount) OVER(partition by prod_name WHERE dateval > dateval_13week)

我不能使用前面和后面的 inside over 子句,因为我的日期没有按顺序排列。 我只需要获取小于当前记录 13 周日期值的记录。

EDIT : 
sum(CASE WHEN dateval >= dateval_13week and dateval <=current_row_dateval then amount else 0 end) over (partition by prod_name order by week_end desc)

为了详细说明,早些时候我使用以下查询对记录进行分区,当时我将所有日期都按顺序排列。现在我有随机顺序的日期,并且有一些日期丢失。

sum(amount) over 
        (partition by prod_name order by prod_name,week_end desc rows between 0 preceding and 12 following)

【问题讨论】:

    标签: sql postgresql partitioning greenplum


    【解决方案1】:

    添加到@D Stanley 答案后,您可以在 Postgre 中使用 FILTER 子句作为聚合函数:

    SELECT SUM(amount) FILTER (WHERE dateval > dateval_13week)
               OVER(partition by prod_name)
    

    【讨论】:

      【解决方案2】:

      您可以在SUM 参数中模拟WHERE

      SELECT SUM(CASE WHEN dateval > dateval_13week THEN amount ELSE 0 END) 
                 OVER(partition by prod_name)
      

      【讨论】:

      • @D 斯坦利。你现在可以检查我的编辑吗?我想要当前行日期与其 13 周之前的日期之间的所有条目的总和。不仅仅是比较它的 13 周价值。我当前的行日期值是我获取条目的参考
      【解决方案3】:

      您不能在 OVER 分区子句中使用 WHERE 子句过滤行。 您可以修复查询,仅选择您需要的行,使用 CASE 并执行满足条件的金额的总和。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-06
        • 1970-01-01
        • 2010-11-08
        • 2020-04-12
        • 2012-12-19
        • 2020-09-12
        • 2018-03-07
        相关资源
        最近更新 更多