PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Obliczanie średniego ważonego kosztu zapasów produktów

Musisz użyć rekurencyjnego CTE:

SQLFiddle

with recursive
stock_temp as (
  select 
    *, 
    row_number() over(partition by product_id order by row_num) as rn
  from 
    stock_table 
)

,cte as (
  select 
    document_type, document_date, 
    product_id, qty_out, qty_in, price, 
    row_num, stock_balance, rn, 
    price as wac
  from 
    stock_temp where document_type = 'SI'

  union all

  select 
    sub.document_type, sub.document_date,
    sub.product_id, sub.qty_out,  sub.qty_in, sub.price,
    sub.row_num, sub.stock_balance,  sub.rn,
    case when sub.qty_in = 0 then main.wac else 
    ((sub.stock_balance - sub.qty_in) * main.wac + sub.qty_in * sub.price) 
      / ((sub.stock_balance - sub.qty_in)  + sub.qty_in) end as wac
  from 
    cte as main
    join stock_temp as sub 
      on (main.product_id = sub.product_id and main.rn + 1 = sub.rn)
)

select * from cte


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak napisać SQL w migracji w Rails

  2. Przesuń (zaktualizuj) unikalne wartości kolumn w PostgreSQL

  3. Hibernate generuje dwa różne identyfikatory sekwencji dla wstawiania PostgreSQL

  4. Zarządzanie wysoką dostępnością w PostgreSQL – Część III:Patroni

  5. Najbliższy rekord dla serii dat