Совокупное процентное прибавление в Postgres - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть сценарий, в котором мне нужно найти процентную разницу для каждого последовательного месяца. Есть ли способ добиться этого (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"   ..

1 Ответ

1 голос
/ 01 апреля 2020

Я думаю, что вы могли бы просто использовать оконные функции и арифметику:

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

Демонстрация на DB Fiddle :

name     | date    |                  quantity
:------- | :------ | ------------------------:
0009-bio | 2020-03 |  158.00000000000000000000
0009-bio | 2020-04 |  189.60000000000000000000
0009-bio | 2020-05 |  227.52000000000000000000
0009-bio | 2020-06 |  273.02400000000000000000
0009-bio | 2020-07 |  327.62880000000000000000
0009-bio | 2020-08 |  393.15456000000000000000
0009-bio | 2020-09 |  471.78547200000000000000
0009-bio | 2020-10 |  566.14256640000000000000
0009-bio | 2020-11 |  679.37107968000000000000
0009-bio | 2020-12 |  815.24529561600000000000
0009-bio | 2021-01 |  978.29435473920000000000
0009-bio | 2021-02 | 1173.95322568704000000000
0009-bio | 2021-03 | 1408.74387082444800000000
0009-bio | 2021-04 | 1690.49264498933760000000
0014     | 2020-03 |  112.00000000000000000000
0014     | 2020-04 |  134.40000000000000000000
0014     | 2020-05 |  161.28000000000000000000
0014     | 2020-06 |  193.53600000000000000000
0014     | 2020-07 |  232.24320000000000000000
0014     | 2020-08 |  278.69184000000000000000
...