정렬 시 중복 값 쿼리 질문입니다. 0 3 1,429

by 오라크으을럽 [SQL Query] [2014.03.05 11:27:28]


조회를 할 때 MOTOR_KIND_CD 가 중복되지 않는 값을 보여줘야 해서 

이런식으로 쿼리를 짰거든요

   SELECT DISTINCT MOTOR_KIND_CD, PART_NO   
  FROM TB_PART_CATALOG 
   WHERE PART_NO = '000000000884'

근데 문제가  EXP_BEGIN_APPLY_DATE 로 정렬을 해야하는데 
MOTOR_KIND_CD가 같으나 날짜가 다른게 있어서 조회를 하면 MOTOR_KIND_CD가 
중복되는 값이 나와버립니다.


   SELECT DISTINCT T.MOTOR_KIND_CD, PART_NO, T.EXP_BEGIN_APPLY_DATE
 FROM TB_PART_CATALOG T
   WHERE T.PART_NO = '000000000884'
    ORDER BY NVL(T.EXP_BEGIN_APPLY_DATE, 0);


결과 값

  MOTOR_KIND_CD    PART_NO EXP_BEGIN_APPLY_DATE
1 L  000000000884      
2 A  000000000884      20070328
3 Y  000000000884      20070328
4 D  000000000884      20070328
5 Y  000000000884      20120901
6 A  000000000884      20130121
7 C  000000000884      20131001
8 Q  000000000884      20140117

결과는 MOTOR_KIND_CD 값만 필요해서 중복이면 최근날짜로 표현하면 될 거 같은데요

결과값이 이런식으로 나올 수 있는 방법이 있을까요?

  MOTOR_KIND_CD    PART_NO EXP_BEGIN_APPLY_DATE
1 L   000000000884  
2 D  000000000884      20070328
3 Y  000000000884      20120901
4 A  000000000884      20130121
5 C  000000000884      20131001
6 Q  000000000884      20140117


by DarkBee [2014.03.05 11:44:32]
SELECT *
  FROM (
          SELECT motor_kind_cd      
               , part_no   
               , exp_begin_apply_date
               , row_number () over ( partition by motor_kind_cd
                                                 , part_no 
                                          order by exp_begin_apply_date desc
                                    ) rn
            FROM t
) 
 WHERE rn = 1
 ORDER BY exp_begin_apply_date NULLS FIRST

by 마농 [2014.03.05 12:36:04]
-- 최근 값을 가져오려면 Distinct 가 아닌 Group By Max 하세요.
SELECT motor_kind_cd, part_no
     , MAX(exp_begin_apply_date) exp_begin_apply_date
  FROM tb_part_catalog
 WHERE part_no = '000000000884'
 GROUP BY motor_kind_cd, part_no
 ORDER BY exp_begin_apply_date NULLS FIRST
     , motor_kind_cd -- 날짜 중복시 2차 정렬기준 필요.
;

by 오라크으을럽 [2014.03.05 13:42:26]

답변 모두 감사합니다! ^ ^

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