【问题标题】:Cumulative percentage addition in PostgresPostgres 中的累积百分比添加
【发布时间】:2020-04-01 13:52:09
【问题描述】:

我有一个场景,我需要找到每个连续月份的百分比差异,有没有办法实现它(Postgresql 版本 11)

有没有办法可以得到如图所示的输出,有很多月份和产品。

下面是输入。

 Name        Date       Quantity
"0009-bio"  "2020-03"   158.0000
"0009-bio"  "2020-04"   
"0009-bio"  "2020-05"   
"0009-bio"  "2020-06"   
"0009-bio"  "2020-07"   
"0009-bio"  "2020-08"   
"0009-bio"  "2020-09"   
"0009-bio"  "2020-10"   
"0009-bio"  "2020-11"   
"0009-bio"  "2020-12"   
"0009-bio"  "2021-01"   
"0009-bio"  "2021-02"   
"0009-bio"  "2021-03"   
"0009-bio"  "2021-04"       
"0014".     "2020-03"   112.0000
"0014"      "2020-04"   
"0014"      "2020-05"   
"0014"      "2020-06"   
"0014"      "2020-07"   
"0014"      "2020-08"   

预期输出:

Name        Date       Quantity
"0009-bio"  "2020-03"   158
"0009-bio"  "2020-04"   158 + 20% = 158+31.6=189.6
"0009-bio"  "2020-05"   189.6 +20% ie, 227.52
"0009-bio"  "2020-06"   227.52 +20% ie,273.02
"0009-bio"  "2020-07"   273.02 + 20%

"0014".     "2020-03"   112
"0014"      "2020-04"   112+ 20%
"0014"      "2020-05"   ..
"0014"      "2020-06"   ..
"0014"      "2020-07"   ..
"0014"      "2020-08"   ..

【问题讨论】:

  • 对于每个name,是否总是只有一个非空quantity
  • @mustaccio 是的,截至目前只有第一行,即 2020-03 March 有值
  • @mustaccio这个有没有解决方案,任何帮助或建议都会得到greta帮助

标签: sql postgresql date sum window-functions


【解决方案1】:

我认为你可以只使用窗口函数和算术:

select
    name,
    date,
    first_value(quantity) over(partition by name order by date)
    * power(1.2, row_number() over(partition by name order by date) - 1) quantity
from mytable t

Demo on DB Fiddle

姓名 |日期 |数量 :------- | :-------- | ------------------------------------: 0009-生物 | 2020-03 | 158.000000000000000000000 0009-生物 | 2020-04 | 189.60000000000000000000 0009-生物 | 2020-05 | 227.52000000000000000000 0009-生物 | 2020-06 | 273.02400000000000000000 0009-生物 | 2020-07 | 327.62880000000000000000 0009-生物 | 2020-08 | 393.15456000000000000000 0009-生物 | 2020-09 | 471.78547200000000000000 0009-生物 | 2020-10 | 566.14256640000000000000 0009-生物 | 2020-11 | 679.37107968000000000000 0009-生物 | 2020-12 | 815.24529561600000000000 0009-生物 | 2021-01 | 978.29435473920000000000 0009-生物 | 2021-02 | 1173.95322568704000000000 0009-生物 | 2021-03 | 1408.74387082444800000000 0009-生物 | 2021-04 | 1690.49264498933760000000 0014 | 2020-03 | 112.00000000000000000000 0014 | 2020-04 | 134.400000000000000000000 0014 | 2020-05 | 161.280000000000000000000 0014 | 2020-06 | 193.53600000000000000000 0014 | 2020-07 | 232.24320000000000000000 0014 | 2020-08 | 278.69184000000000000000

【讨论】:

    猜你喜欢
    • 2018-09-08
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 2011-09-11
    相关资源
    最近更新 更多