select 시 flag 값에 따라 출력 하는 방법 질문드립니다. 0 1 1,220

by 성수다 [2021.04.23 14:56:07]


안녕하세요 특정 데이터를 ibaits에서 select 해오는 쿼리가 있는데요 어떤 글이 최초 등록 되면 flag 값이 reg로 인서트 되고 수정하게되면 이력을 남겨야 해서 flag 값이 upd로 새로 인서트 되는 형식입니다. 하지만 현재 쿼리문은 flag = reg 일때만 셀렉트를 해오기 떄문에 수정된 이력은 보이지 않습니다. 

그래서 질문 드리고 싶은것이 flag 컬럼 값이 reg 일때와 upd 일때 모두 값을 가지고 오고 싶습니다. upd 일때는 가장 최근에 수정된 값만 가지고 와야 하기때문에 동적 쿼리문을 쓰면 될거 같긴한데 동적 쿼리문 말고 쓸 방법은 없을까 질문 드립니다. 감사합니다.

by 뉴비디비 [2021.04.23 21:18:46]
-- 오라클 기준
WITH tmpT (value_a,  hist_grp,  flag, hist_date) AS (
	SELECT '값1 로그1' , '1', 'upd', '20210401' FROM DUAL UNION ALL
	SELECT '값1 로그2' , '1', 'upd', '20210402' FROM DUAL UNION ALL
	SELECT '값1 로그3' , '1', 'upd', '20210403' FROM DUAL UNION ALL
	SELECT '값1 처음로그','1','reg', '20210201' FROM DUAL UNION ALL
	SELECT '값2 로그2' , '2', 'upd', '20210205' FROM DUAL UNION ALL
	SELECT '값2 로그1' , '2', 'upd', '20210203' FROM DUAL UNION ALL
	SELECT '값2 처음로그','2','reg', '20210201' FROM DUAL
)
SELECT * FROM (
    SELECT 
        value_a,  hist_grp,  flag, hist_date
        , ROW_NUMBER() OVER( PARTITION BY hist_grp ORDER BY DECODE(flag, 'reg', 1, 2) ASC, hist_date DESC ) AS hist_num
    FROM tmpT
) Tbl
WHERE hist_num < 3 
ORDER BY hist_grp , hist_num DESC
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입