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)
您可以WHERE在SUM参数中模拟:
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)
| 归档时间: |
|
| 查看次数: |
4305 次 |
| 最近记录: |