在累积总和的每次迭代中添加条件?

时间:2019-04-24 20:13:36

标签: postgresql

我有一张桌子,上面放着已经到达港口的船只,以及他们捡了多少产品。我还有另一个表,其中包含有关该端口的每日产量和它可以存储的最大容量的信息。到目前为止,代码如下:

select *, CASE WHEN sum(daily_prod) OVER (PARTITION BY project_name ORDER BY date_arrive) - sum(pickup) OVER (PARTITION BY project_name ORDER BY date_arrive) > storage_capacity_mt 
THEN storage_capacity_mt - pickup
ELSE sum(daily_prod) OVER (PARTITION BY project_name ORDER BY date_arrive) - sum(pickup) OVER (PARTITION BY project_name ORDER BY date_arrive)
END
as delta from t_test

该表如下所示:

date_arrive     pickup    project_name  daily_prod     storage_capacity_mt
2016-01-06      0         a5            60000          151575             
2016-01-07      0         a5            60000          151575                         
2016-01-08      0         a5            60000          151575  
2016-01-09      139222    a5            60000          151575  
2016-01-10      0         a5            60000          151575  
2016-01-11      63126     a5            60000          151575

我正在尝试创建一个将考虑以下条件的累积总和:

  • 如果总和大于容量,则将值设置为容量。从那时起,总和应继续增加容量,直到减少为止。
  • 当端口发生拾取时,应在考虑先前条件后从累计总和的当前值减小该数字。因此,如果总和超过了容量,则应等于容量,然后通过取货来减少该数字,并且结果应为当前值。否则,只差一点。
  • 该值不能低于零

由于现在可以正常工作,因此代码将识别出该值超出了生产能力,从生产能力中减去了提货量,但下一个值将不会将日产量增加到与前一行的差额上,而是返回到运行的累计量总和。

那我怎么实现这样的代码?

0 个答案:

没有答案