짬나서 만들어 봤삼..


WITH TAB1 AS (
SELECT "200909" AS DT , 5 AS STOCK , 200 AS AMT FROM DUAL UNION ALL
SELECT "200908",6,100 FROM DUAL UNION ALL
SELECT "200907",9,180 FROM DUAL UNION ALL
SELECT "200906",7,220 FROM DUAL
) ,
TAB2 AS (
SELECT DT,STOCK,AMT,SUM(STOCK) OVER(ORDER BY DT DESC ) MINUS_STOCK ,ROWNUM AS RNUM
FROM TAB1
)

SELECT DT,STOCK,
CASE WHEN 15 - MINUS_STOCK >= 0 THEN STOCK ELSE STOCK+(15-MINUS_STOCK) END
AS MINUS_STOCK , AMT
FROM (
SELECT * FROM TAB2
) WHERE RNUM <= ( SELECT RNUM FROM TAB2 WHERE 15 - MINUS_STOCK <= 0 AND ROWNUM <2 ) ;

대용량이 될 경우 퍼포먼스는 보장 못함..
그러므로 위의 TAB2 와 같은 역할을 하는 VIEW 나 집계 테이블을 만들어 놓으시는 것이
좋을 것으로 사료됨..



> 손님 님이 쓰신 글
> ----------------------------------------------------------
>
>
> > 손님 님이 쓰신 글
> > ----------------------------------------------------------
> > 문제는 디비에
> >
> > 제품명 입고일자 수량 단가
> > A 200909 5 200
> > A 200908 6 100
> > A 200907 9 180
> > A 200906 7 220
> >
> > 이런식으로 들어가 있습니다...
> >
> > 만일 15개 라는 재고수량이 있다고 칠때....
> >
> > 위의 디비에서 최근순으로 수량 15개까지의 정보를 어찌 빼오느냐가가 질문입니다..
> >
> > 결과적으로 나와야 하는데이터가
> >
> > 9월에 5개 단가 200
> > 8월에 6개 단가 100
> > 7월에 4개 단가 180 ----7월은 총 9개가 들어 왔으나 총 재고수량이 15개이므로 4개만 가져옵니다.
> >
> > 이렇게 뽑아와서 그걸 가지고 계산을 해야 한는데 가능한지요??
> >
> > 초보라 많이 힘드네염....
> >
> > 선배님들의 도움 간절히 바랍니다...
>
>
>
>
> 여러분들께서 답???주셨는데..아직 잘 이해가 안가네여....몇일전부터 나름 검색도 해보고 이것저것 도전도
>
> 해보았습니다만....아직 공부를 많이 해야하네요.....고참이 없냐라는 분들이 계신데...^^;; 없습니다...
>
> 그런사정이 있어서....
>
> 선배님들께 다시한번 도움 요청합니다...
>
> 어떤님께서
>
> SELECT * FROM (SELECT ROW_NUMBER()... RM, .. FROM TABLE ) WHERE RM<=15
>
> 이걸 이용하라고 하셨는데...
>
> 잘 이해가 안갑니다....조금만 더 깊이 가르쳐주시면 진짜 감사하겠습니다..
>
>