2014-06-11 2 views
0

ACCIDENT_REC_NUM 및 VEHICLE_REC_NUM 열을 반복하는 모든 행의 코드 번호 (REC_NUM)가있는 테이블을 만들려고합니다. 그래서이 두 필드로 그룹화 할 수있는 모든 행에서 코드를 가져와야합니다.그룹에서 첫 번째 행 제외

이 부분 좋아,이 쿼리하여 확인할 수 있습니다 :

SELECT COUNT(REC_NUM) FROM SEQUENCE_EVENT WHERE ACCIDENT_REC_NUM IN (
    SELECT ACCIDENT_REC_NUM 
    FROM (
    select ACCIDENT_REC_NUM, VEHICLE_REC_NUM, COUNT(*) AS REPEAT from SEQUENCE_EVENT 
    GROUP BY ACCIDENT_REC_NUM, VEHICLE_REC_NUM 
) 
    WHERE REPEAT > 1 
) 

난 그냥있는 행의 REC_NUM 필요하기 때문에 그래서, 지금은 각 그룹의 첫 줄을 제외해야 반복하므로 첫 번째 것은 괜찮습니다.

+0

아니요, 죄송합니다. 오라클 DB입니다. – wviana

답변

0

그룹의 "첫 번째"행을 어떻게 결정합니까?

SELECT COUNT(e.rec_num) 
    FROM sequence_event e 
    JOIN (SELECT MIN(c.rec_num) AS first_rec_num 
       , c.accident_rec_num 
       , c.vehicle_rec_num 
      FROM sequence_event c 
     GROUP 
      BY c.accident_rec_num 
      , c.vehicle_rec_num 
     HAVING COUNT(*) > 1 
     ) r 
    ON r.accident_rec_num = e.accident_rec_num 
    AND r.first_rec_num <> e.rec_num 

결석 A :

각 그룹에 대해 REC_NUM의 가장 낮은 값을 가진 행을 제외, 당신은 같은 것을 할 수 REC_NUMSEQUENCE_EVENT 테이블에 독특하고 null이 아닌 가정 반환 할 것으로 기대되는 결과 집합의 샘플은 우리가 할 수있는 모든 것에 관한 것입니다. 원래 쿼리는 개수가있는 단일 행을 반환합니다. 그래서 위의 쿼리는 카운트에서 각 그룹에 대한 "첫 번째"행을 제외한다는 점을 제외하고는 똑같은 작업을 수행합니다.

+0

변경해야하는 것은 SELECT COUNT (e.rec_num)에서 SELECT e.rec_num까지의 첫 번째 줄뿐입니다. 대단히 감사합니다. – wviana

0

분석 기능을 사용하는 것이 좋습니다. 나는 다음 당신이 원하는 것을 명시 적으로 수행 생각 :

select count(*) 
from (select se.*, 
      count(*) over (partition by accident_rec_num, vehicle_rec_num) as repeat, 
      row_number() over (partition by accident_rec_num, vehicle_rec_num 
           order by rec_num) as seqnum 
     from sequence_event se 
    ) t 
where repeat > 1 and seqnum > 1; 

내가 사고 및 차량 번호가 상호 작용하는 방법에 대한 확실하지 않다 때문에이 정확한 쿼리 것을 100 % 확실하지 않다.

관련 문제