11

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

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

由于我的日期不按顺序排列,因此我不能使用 before 和 following 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)
4

3 回答 3

14

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

SELECT SUM(amount) FILTER (WHERE dateval > dateval_13week)
           OVER(partition by prod_name)
于 2018-12-26T14:47:55.203 回答
8

WHERE您可以在SUM参数中模拟:

SELECT SUM(CASE WHEN dateval > dateval_13week THEN amount ELSE 0 END) 
           OVER(partition by prod_name)
于 2014-03-03T14:48:11.377 回答
1

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

于 2014-03-03T14:54:34.290 回答