자료는 아래와 같습니다.
물품번호 구분 주문번호 주문일자
A1234 입고 123456 20161201
A1234 반품 123456 20161207
위와 같이 데이터가 있으면 업무처리를 12월12일 최종확인하면서
반품된것까지 제외할려고 합니다. 즉 A1234의 물품은 입고처리에서 빠지게 하고 싶습니다.
테이블은 한번만 읽고 가능할런지요.
WITH t(item_no, gb, order_no, order_dt) AS ( SELECT 'A1234', '입고', 123456, '20161201' UNION ALL SELECT 'A5678', '입고', 123456, '20161201' UNION ALL SELECT 'A1234', '반품', 123456, '20161207' ) -- 1. 셀프조인 -- SELECT a.* FROM t a LEFT OUTER JOIN t b ON b.gb = '반품' AND a.item_no = b.item_no AND a.order_no = b.order_no WHERE a.gb = '입고' AND b.gb IS NULL ; -- 2. 분석함수 -- SELECT item_no, gb, order_no, order_dt FROM (SELECT item_no, gb, order_no, order_dt , LEAD(gb) OVER(PARTITION BY order_no, item_no ORDER BY order_dt) x FROM t ) a WHERE gb = '입고' AND x IS NULL ;
예 마농님 감사합니다.
여러모로 도움이 많이 되고 있습니다. 감사합니다.