참고할 쿼리
SELECT *
FROM (
SELECT '0' AS CHK /*선택*/
,A.RLT_CMP_CD /*관계회사코드*/
,A.ISN_NO /*발급번호*/
,A.ISN_TP_CD /*발급유형코드*/
,A.SN /*순번*/
,A.ISN_DOC_NM /*발급서류명*/
,A.ISN_DATE /*발급일시*/
,CONVERT(CHAR(8), A.ISN_DATE, 112) AS ISN_YMD /*발급일시:발급일자*/
,A.ISN_DTT_CD /*발급구분코드*/
,A.ISN_INCD /*발급부수*/
,A.ISN_OPT_CONT /*발급옵션내용*/
,A.ISN_EMP_NO /*발급사원번호*/
,Y.EMP_NM /*사원명*/
,IIF((COUNT(*) OVER(PARTITION BY A.RLT_CMP_CD, A.ISN_NO, A.ISN_TP_CD)) > 1, '재발행', '정상발행') AS USE_STS_NM /*사용상태*/
,IIF((COUNT(*) OVER(PARTITION BY A.RLT_CMP_CD, A.ISN_NO, A.ISN_TP_CD)) > 1, CONVERT(CHAR(8), (MAX(ISN_DATE) OVER(PARTITION BY A.RLT_CMP_CD, A.ISN_NO, A.ISN_TP_CD)), 112), '') AS RE_PBLC_YMD /*재발급일자*/
,IIF((COUNT(*) OVER(PARTITION BY A.RLT_CMP_CD, A.ISN_NO, A.ISN_TP_CD)) > 1, (COUNT(*) OVER(PARTITION BY A.RLT_CMP_CD, A.ISN_NO, A.ISN_TP_CD))-1, '') AS RE_PBLC_CNT /*재발행횟수*/
,B.PAMT_TO /*납입회차:분납회차*/
,CONVERT(CHAR(8), B.RCP_DATE, 112) AS RCP_YMD /*영수일시:영수일자*/
,B.WTSL_TR_AMT /*원화환산금액:영수공제료*/
,B.FSC_YMD /*회계일자*/
,(SELECT RLTPSN_NM FROM TB_GC_INSCT_RLTPSN_D WHERE RLT_CMP_CD = C.RLT_CMP_CD AND INSPLY_NO = C.INSPLY_NO AND EDR_NO = C.EDR_NO AND RLTPSN_DTT_CD = '01') AS INSR_AGPR /*계약자*/
,C.INSPLY_NO /*공제증권번호*/
,C.EDR_NO /*배서번호*/
,C.INSR_PRD_CD /*공제상품코드*/
,ROW_NUMBER() OVER(PARTITION BY A.RLT_CMP_CD, A.ISN_NO, A.ISN_TP_CD ORDER BY A.ISN_DATE DESC) AS ROWNUM
FROM TB_GC_INSR_RND_M B /*[공제입출금]*/
INNER JOIN TB_GC_INSR_ISN_HIS_M A /* [공제발급이력] */
ON A.ISN_NO = B.RCWR_NO /*영수증번호:인덱스 생성한다고함*/
INNER JOIN TB_GC_INSCT_M C /*[공제계약]*/
ON C.RLT_CMP_CD = B.RLT_CMP_CD /*관계회사코드*/
AND C.INSPLY_NO = B.INSPLY_NO /*공제증권번호*/
AND C.EDR_NO = B.EDR_NO /*배서번호*/
LEFT OUTER JOIN TB_HR_HNR_BSC_M Y /*[인사기본]*/
ON Y.RLT_CMP_CD = A.RLT_CMP_CD /*관계회사코드*/
AND Y.EMP_NO = A.ISN_EMP_NO /*사원번호*/
WHERE 1 = 1
AND A.RLT_CMP_CD = '1000'
AND A.ISN_TP_CD = '03' /*발급유형코드:영수증*/
) A
WHERE 1 = 1
AND A.ROWNUM = 1
=> 먼저 기본조회 쿼리에서 PARTITION BY 로 그룹을 주고 여기에 ORDER BY로 순서를 줄 컬럼을 정한다. 가장 큰값을 구하려면 DESC 를 붙히고 가장 작은 값을 구하려면 ASC를 구한다.
,ROW_NUMBER() OVER(PARTITION BY A.RLT_CMP_CD, A.ISN_NO, A.ISN_TP_CD ORDER BY A.ISN_DATE DESC) AS ROWNUM
이렇게 되면 ROWNUM 이 ISN_DATE 기준으로 가장 큰값에 1번에 붙게 된다.
그러면 해당 쿼리를 감싸주고 밖에 있는 쿼리에서 ROWNUM = 1을 붙여서 가장 큰값만 가져오게 하면 된다.