sql >> データベース >  >> RDS >> PostgreSQL

製品在庫の加重平均コストの計算

    再帰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. InnoDBテーブルとMyISAMテーブルの結合

    2. テーブルの値を使用したPostgresINTERVAL

    3. 左アウターをLaravelと結合するにはどうすればよいですか?

    4. Postgresに一括挿入するための最速の方法は何ですか?