2012-04-03 4 views
1

각 치즈 ID의 최대 값 (seq_no)이 MOLD 인 치즈에 대한 치즈 및 신선한 치즈를 얻으려면 FRESHNESS로 내 치즈 테이블에 가입하고 싶습니다.rank()를 내부 조인과 함께 사용하려면 어떻게해야합니까?

rank()를 사용하는 경우 어디에서 FRESHNESS에 가입해야하나요?

CHEESE         FRESHNESS 
CHEESE_ID SEQ_NO FRESH_CODE    FRESH_CODE FRESH_DESC  
=================================   ======================== 
    1   1  MOLD     MOLD   MOLDY CHEESE  
    1  23  FRSH     FRSH   EDIBLE 
    1  34  FRSH 
    2   2  FRSH 
    2  18  MOLD 
    3   3  MOLD 
    3   5  MOLD 
    3   7  MOLD 


DESIRED RESULT 
========================== 
CHEESE_ID SEQ_NO FRESH_CODE FRESH_DESC  SEQ_RANK 
2   18  MOLD  MOLDY CHEESE 1 
3   7  MOLD  MOLDY CHEESE 1 

다음은 원하는 일련 번호를 얻기 위해 사용하는 코드입니다.

select 
     cheese_id,seq_no,fresh_code,seq_rank 
    from (select 
     cheese_id,seq_no, fresh_code, 
     rank() over (partition by cheese_id 
          order by seq_no desc) seq_rank 
from cheese 
where seq_rank = 1 
and fresh_code = 'MOLD' 

답변

2

당신이 할 수있는 중 하나 부질에 참여

select cheese_id,seq_no,fresh_code,fresh_desc,seq_rank 
    from (select cheese_id, 
       seq_no, 
       fresh_code, 
       fresh_desc, 
       rank() over (partition by cheese_id 
           order by seq_no desc) seq_rank 
      from cheese 
       join freshness using (fresh_code)) 
where seq_rank = 1 
    and fresh_code = 'MOLD' 

또는 당신이 당신의 하위 쿼리에 가입하실 수 있습니다

select cheese_id,seq_no,fresh_code,fresh_desc,seq_rank 
    from (select cheese_id, 
       seq_no, 
       fresh_code, 
       fresh_desc, 
       rank() over (partition by cheese_id 
           order by seq_no desc) seq_rank 
      from cheese) cheese_outer 
     join freshness using (fresh_code) 
where seq_rank = 1 
    and fresh_code = 'MOLD' 
관련 문제