SEQ MODEL FLAG PRO_DATE
1 00001 SS1 out 20170101
2 00002 SS1 in 20170201
3 00003 SS2 out 20170501
4 00004 SS1 out 20170501
5 00005 SS2 in 20171101
6 00006 SS1 in 20170901
7 00007 SS1 out 20171001
8 00008 SS1 in 20171101
9 00009 SS1 out 20171102
10 00010 SS1 in 20171201
11 00011 SS3 out 20171201
12 00012 SS2 out 20171201
13 00013 SS2 in 20171221
14 00014 SS3 in 20171221
-----------------------------------------------------------------------------------------
WITH TEMP AS
(
SELECT '00001' seq, 'SS1' model, 'out' flag, '20170101' pro_date FROM dual UNION ALL
SELECT '00002', 'SS1', 'in', '20170201' FROM dual UNION ALL
SELECT '00003', 'SS2', 'out', '20170501' FROM dual UNION ALL
SELECT '00004', 'SS1', 'out', '20170501' FROM dual UNION ALL
SELECT '00005', 'SS2', 'in', '20171101' FROM dual UNION ALL
SELECT '00006', 'SS1', 'in', '20170901' FROM dual union all
SELECT '00007', 'SS1', 'out', '20171001' FROM dual UNION ALL
SELECT '00008', 'SS1', 'in', '20171101' FROM dual UNION ALL
SELECT '00009', 'SS1', 'out', '20171102' FROM dual UNION ALL
SELECT '00010', 'SS1', 'in', '20171201' FROM dual UNION ALL
SELECT '00011', 'SS3', 'out', '20171201' FROM dual UNION ALL
SELECT '00012', 'SS2', 'out', '20171201' FROM dual UNION ALL
SELECT '00013', 'SS2', 'in', '20171221' FROM dual UNION ALL
SELECT '00014', 'SS3', 'in', '20171221' FROM dual
)
SELECT * from temp
--------------------------------------------------------------------------------------------
위와 같은 테이블이 있습니다.
각 모델들은 출고 입고가 반복되는 히스토리 테이블 인데
출고와 입고 사이의 날짜를 모두 더하여 쿼리를 출력 하고 싶은데 도통 생각이 떠오르지 않아서요,
flag가 in만 읽어서 해당 날짜들을 그룹하여, in보다 작은 OUT 중에 max를 읽어서 하면 될 것 같은데, 그렇게 하면 너무 복잡해 지는 것 같아 혹시 다른 방안이 있는지 지식 공유좀 부탁드립니다.
계산은 SS2의 경우를 예로 들면
out 20170501
in 20171101
out 20171201
in 20171221
이 있으면 첫번째 와 두번째 out과 in 의 사이 일자를 더하여 180일+ 20일 = 200일
이런식으로 계산하여 조회를 하고 싶습니다.
그럼 SS2 200일
SS3 20일
SS1 209일
이런식으로요