是否可以在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)
答案 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并执行满足条件的金额总和来修复查询,仅选择您需要的行。