mssql로 바꿔야하는데ㅠㅠ도저히 모르겠어요ㅠㅠ 0 2 4,295

by SQL [2018.04.12 16:23:04]


mssql에서 MAX(SQ_NO) KEEP(DENSE_RANK FIRST ORDER BY DT_TRADE DESC) 구문을 뭘로 대체할수 있는지 모르겠습니다ㅠㅠ

 

by 마농 [2018.04.12 17:28:22]

우선 원본 쿼리의 조건절 비효율부터 고쳐볼께요.
컬럼을 가공하여 조건값과 비교하지 마시고
컬럼은 그대로 둔채 조건값을 가공하여 비교하세요.
  - 변경전 : AND SUBSTR(dt_trade, 1, 6) <= '201804'
  - 변경후 : AND dt_trade <= '201804' || '32'
 

SELECT cd_company
     , cd_finproduct
     , SUM(CASE WHEN no_docu IS NOT NULL THEN am_matrdm END) sum_matrdm
     , MAX(CASE WHEN rn = 1 THEN sq_no END) max_sq_no
     , MAX(dt_trade) dt_trade
  FROM (SELECT cd_company
             , cd_finproduct
             , dt_trade
             , sq_no
             , no_docu
             , am_matrdm
             , ROW_NUMBER() OVER(PARTITION BY cd_company, cd_finproduct
                                     ORDER BY dt_trade DESC, sq_no DESC) rn
          FROM fi_fundmgt_hst
         WHERE cd_company = '5000'
           AND dt_trade <= CONCAT('201804', '32')
        ) a
 GROUP BY cd_company, cd_finproduct
;

 


by SQL [2018.04.12 17:48:49]

오 항상 배워갑니다

감사합니다~!!!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입