주문과 예정공급으로 할당하는 로직을 구현중에 있습니다.
주문받은 수량과 일자를 기준으로 공급예정수량을 순차적으로 선입선출합니다.
먼저 제가 짠 프로그램은 아래와 같은데..
WITH 주문 AS
(
SELECT '배' item, '20140101' demand_date, 100 demand_qty FROM dual
UNION ALL SELECT '배', '20140102' demand_date, 200 FROM dual
)
, 예정공급 AS
(
SELECT '배' item , '20140102' supply_date, 50 qty FROM dual
UNION ALL SELECT '배' , '20140103', 80 FROM dual
UNION ALL SELECT '배' , '20140104', 100 FROM dual
)
SELECT NVL(t.item, x.item) AS 품목
, t.demand_qty AS 주민일자
, t.demand_date AS 주문일자
, t.demand_qty AS 주문수량
---------------------------------------------------
, x.supply_date AS 공급가능일자
, x.qty AS 공급수량
, GREATEST(0, t.demand_qty - x.sqty) AS 주문잔량
, LEAST(t.demand_qty, x.sqty) - (x.sqty - x.qty) AS 할당수량
FROM 주문 t
LEFT OUTER JOIN
(SELECT 예정공급.*
, SUM(qty) OVER(PARTITION BY item ORDER BY supply_date) sqty
FROM 예정공급
) x
ON x.item = t.item
ORDER BY 품목, demand_date, supply_date;
일단 베이스가 되는 주문이 하나가 아니라 여러건이라 건수가 많이져 할당이
정상적으로 적용되지 않네요 ㅡㅡ;;
이미 순차적프로그램으로 구현하였으니 속도상의 문제로 쿼리로 구현중인데 좋은 방법이 없을까요?
최종 원하는 데이타 모양은 아래와 같습니다.
결과 |
주문일자 |
수요 |
예정공급일자 |
공급수량 |
할당 |
배 |
2014-01-01 |
100 |
2014-01-02 |
50 |
50 |
배 |
2014-01-01 |
100 |
2014-01-03 |
80 |
50 |
배 |
2014-01-02 |
200 |
2014-01-03 |
80 |
30 |
배 |
2014-01-02 |
200 |
2014-01-04 |
100 |
100 |