개발자는 아니고 실무에 아주 간단한 쿼리를 활용하고자 하는 실무자인데, 쿼리문 질물이 있어 글 남깁니다.
관리번호 | 장비명 | 모델명 | 제조사 |
001 | aa | aaa | AA |
002 | bb | bbb | BB |
기본적인 장비들의 목록이 있는 table1
관리번호 | 이벤트날짜 | 이벤트내용 |
001 | 2020-10-20 | 입고 |
001 | 2021-01-05 | 수리 |
002 | 2021-01-10 | 입고 |
002 | 2021-02-05 | 수리 |
002 | 2021-02-10 | 수리 |
누적해서 장비들의 이벤트(입고, 수리, 교정 등)들을 기록하는 table2 가 있습니다.
위 두개의 table을 활용하여
관리번호 | 장비명 | 모델명 | 제조사 | 입고 | 수리 |
001 | aa | aaa | AA | 2020-10-20 | 2021-01-05 |
002 | bb | bbb | BB | 2021-02-05 | 2021-02-10 |
위와 같이 각각 해당하는 이벤트의 최신 날짜만 가져오는 쿼리를 짤 수 가 있을까요?
기존에 엑셀함수를 활용하여 관리 하던 부분인데, 매번 업데이트 파일을 제공해야 해서
쿼리를 활용해보고싶은데 여러 고수분들의 도움 요청해봅니다 :)
WITH table1 AS ( SELECT '001' 관리번호, 'aa' 장비명, 'aaa' 모델명, 'AA' 제조사 FROM dual UNION ALL SELECT '002', 'bb', 'bbb', 'BB' FROM dual UNION ALL SELECT '003', 'cc', 'ccc', 'CC' FROM dual ) , table2 AS ( SELECT '001' 관리번호, '2020-10-20' 이벤트날짜, '입고' 이벤트내용 FROM dual UNION ALL SELECT '001', '2021-01-05', '수리' FROM dual UNION ALL SELECT '002', '2021-01-10', '입고' FROM dual UNION ALL SELECT '002', '2021-02-05', '수리' FROM dual UNION ALL SELECT '002', '2021-02-10', '수리' FROM dual ) -- Oracle -- SELECT a.관리번호 , a.장비명 , a.모델명 , a.제조사 , MAX(CASE 이벤트내용 WHEN '입고' THEN 이벤트날짜 END) 입고 , MAX(CASE 이벤트내용 WHEN '수리' THEN 이벤트날짜 END) 수리 , MAX(CASE 이벤트내용 WHEN '교정' THEN 이벤트날짜 END) 교정 FROM table1 a LEFT OUTER JOIN table2 b ON a.관리번호 = b.관리번호 GROUP BY a.관리번호, a.장비명, a.모델명, a.제조사 ;