postgres中over子句中的where子句

use*_*524 7 sql postgresql partitioning greenplum

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

SELECT SUM(amount) OVER(partition by prod_name WHERE dateval > dateval_13week)
Run Code Online (Sandbox Code Playgroud)

因为我的日期不在订单中,所以我不能使用前后内部条款.我需要获取的是当前记录的小于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)
Run Code Online (Sandbox Code Playgroud)

简单来说,早些时候,当我在序列中包含所有日期时,我使用以下查询对记录进行分区.现在我按随机顺序排列日期,并且有一些缺少日期.

sum(amount) over 
        (partition by prod_name order by prod_name,week_end desc rows between 0 preceding and 12 following)
Run Code Online (Sandbox Code Playgroud)

D S*_*ley 7

您可以WHERESUM参数中模拟:

SELECT SUM(CASE WHEN dateval > dateval_13week THEN amount ELSE 0 END) 
           OVER(partition by prod_name)
Run Code Online (Sandbox Code Playgroud)


小智 5

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

SELECT SUM(amount) FILTER (WHERE dateval > dateval_13week)
           OVER(partition by prod_name)
Run Code Online (Sandbox Code Playgroud)