선입선출 쿼리 문의 드립니다. 0 1 920

by 얼마안남음 [SQL Query] 선입선출 수량분할 [2022.08.30 23:43:35]



안녕하세요.  쿼리 가끔씩 막힐때 찾아보며 도움 받고 있습니다.
-- 선입선출 문의 드립니다. 
-- 컬럼명 : 계좌, 순번, 구분, 수량
-- 구분 : 1:매도/2:매수
WITH T ( acnt, seq, gb, qnt ) ( 
          SELECT '1111', '001', '2', 2 FROM DUAL 
UNION ALL SELECT '1111', '002', '2', 2 FROM DUAL   
UNION ALL SELECT '1111', '003', '1', 2 FROM DUAL   
UNION ALL SELECT '1111', '004', '1', 1 FROM DUAL   
UNION ALL SELECT '1111', '005', '1', 5 FROM DUAL   -- 질의하는 데이터 입니다.
UNION ALL SELECT '1111', '006', '2', 2 FROM DUAL   
UNION ALL SELECT '1111', '007', '2', 2 FROM DUAL   
)
SELECT * 
  FROM T


[기대결과]

계좌    순번(잔고)  구분    수량    청산순번(구분)    처리구분    청산수량    
1111    001         2       2       003(1)            청산        2           
1111    002         2       2       004(1)            청산        1           
1111    002         2       2       005(1)            청산        1       -- 수량배분으로 1건 청산
1111    005         1       4        -                신규        0       -- 005의 잔여수량을 신규 잔고로 생성(행추가)
1111    005         1       4       006(2)            청산        2       -- 청산되는 구분이 달라집니다.(구분의 기준값이 스위치 됩니다)
1111    005         1       4       007(2)            청산        2       -- 최종 청산되어 잔고수량이 0 이 됩니다.

즉, 매도/매수 구분을 기준으로 선입선출 잔고가 정리되다가, 

잔고소진 시점에 
1. 잔고수량 범위 내에 소진시 - 정상처리
2. 잔고수량 초과건 발생 시   - 소진 후 잔여수량을 신규잔고로 생성(위 처리구분이 신규행)
3. 이후 반대거래로 청산처리( 위에서 신규행 이후 발생건)

이렇게 처리되야 합니다. 
초과건 발생한 경우 처리에 실마리도 안 잡혀서 문의드립니다. 

감사합니다. 

 

by 마농 [2022.08.31 20:34:05]
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입