2017-11-30 3 views
1

각 그룹에 대해 데이터 세트의 행 번호를 증가시켜야하는 PLSQL (Oracle 12)에 대한 쿼리를 작성하고 있습니다.반복 그룹이있는 그룹의 행 번호 증가

내 문제는이 질문 (Increment Row Number on Group)과 유사합니다. 그러나 약간 다른 시나리오가 있습니다. 나는 그늘을 데이터 위에 반복하여 가지고 있으며 그룹화 할 때 원래의 순서를 유지하고 싶습니다.

Level | Shade 
------------- 
1  | A 
2  | A 
3  | A 
4  | B 
5  | B 
6  | B 
7  | A 
8  | A 
9  | A 

아래 데이터의 경우

내가 그늘하여 DENSE_RANK 함수의 순서를 사용하는 경우 다음과 같은 결과를

Group | Shade | Amount 
---------------------- 
1  | A  | 3 
2  | B  | 3 
3  | A  | 3 

을 얻으려면, 나는 원래 순서를 유지할 수 아니다 이것이 내가 얻은 것입니다 :

Group | Shade | Amount 
---------------------- 
1  | A  | 6 
2  | B  | 3 

그룹화 할 때 어떻게 원래의 그룹 패턴을 유지할 수 있습니까?

답변

2

당신은 그룹을 정의하는 행 번호의 차이를 사용할 수 있습니다

select Shade, count(*) as amount 
from (select t.*, 
      row_number() over (order by level) as seqnum, 
      row_number() over (partition by shade order by level) as seqnum_s 
     from t 
    ) t 
group by Shade, (seqnum - seqnum_s); 

이 작품 이유를 설명하기는 힘들다. 하위 쿼리의 결과를 보면 두 개의 row_number() 값의 차이가 순차 그룹을 식별하는 이유가 분명 해집니다.