2013-03-07 1 views
0

내가 코드를 아래이 곳의 레코드 수를 제공하는 방법 :

select b_id, 
     process_date 
    from (select c1.b_id, 
       c1.process_date, 
       row_number() over(partition by a.a_id 
           order by c1.process_date desc) rn 
      from table_a a 
       inner join 
       table_b b 
       on a.a_id = b.a_id 
       inner join 
       table_c c1 
       on b.b_id = c1.b_id 
     ) 
where rn = 1; 

어떻게 동적으로 즉, RN = 수 (RN) .Tried하고 말하는 오류를 givng있다 RN 할당하는 기능에 의해 그룹에없는

답변

1

where 절에서 count를 사용할 수 없습니다. 그룹별로 사용하고 있습니다.

예 :

SELECT columnname, COUNT(*) 
FROM TableName 
GROUP BY columnname 
HAVING COUNT(*) = 1 
0

당신은 분석 함수로 계산 (*)를 사용할 수 있습니다 :

만 하위 쿼리를 정렬 할 그만큼 마지막 process_date을 얻으려고 노력하는 경우
select b_id, 
     process_date 
    from (select c1.b_id, 
       c1.process_date, 
       row_number() over(partition by a.a_id 
           order by c1.process_date desc) rn, 
       count(*) over()         cn 
      from table_a a 
       inner join 
       table_b b 
       on a.a_id = b.a_id 
       inner join 
       table_c c1 
       on b.b_id = c1.b_id 
     ) 
where rn = cn; 

:

select b_id, 
      process_date 
     from (select c1.b_id, 
        c1.process_date,     
       from table_a a 
        inner join 
        table_b b 
        on a.a_id = b.a_id 
        inner join 
        table_c c1 
        on b.b_id = c1.b_id 
       order by c1.process_date desc 
      ) 
     where rownum = 1; 

where rn = cn;