postgres中over子句中的where子句

时间:2014-03-03 14:45:35

标签: sql postgresql partitioning greenplum

是否可以在overclause中使用where子句,如下所示?

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

由于我的日期不在订单中,因此无法使用前后内部子句。 我需要获取的是当前记录的小于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)

3 个答案:

答案 0 :(得分:5)

您可以模拟WHERE参数中的SUM

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

答案 1 :(得分:2)

在@D Stanley答案中,您可以使用FILTER子句来实现Postgre中的聚合函数:

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

答案 2 :(得分:1)

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

相关问题