2017-04-02 1 views
0

다음 표는sqlite는 열 값에 따라 정렬 된 파티션을 만듭니다. DENSE_RANK()

ID  VAR1 
--  ---- 
A  YES 
B  YES 
C  YES 
D  NO 
E  YES 
F  NO 
G  YES 
H  YES 

@ 내가 VAR1 지금처럼 YESNO 사이에 변경하는 새 파티션 생성하고자하는 경우 : 분명히 나는 ​​dense_rank()의를 사용할 수 있습니다

ID  VAR1 VAR2 
--  ---- 
A  YES  1 
B  YES  1 
C  YES  1 
D  NO  2 
E  YES  3 
F  NO  4 
G  YES  5 
H  YES  5 

을 SQL 서버,하지만이 sqlite 이에 상응하는 참조하십시오.

누구나 알고있는 해결책이 있습니까?

+1

원하는 것은'dense_rank()'이 아닙니다. –

+0

그건 dense_rank가하는 것이 아닙니다. – GurV

답변

1

이것은 SQLite에서는 까다 롭지만 최소한 CTE를 지원합니다. 여기에 아이디어가 있습니다. . 이전 값을 가져옵니다 (상관 된 부속 조회 사용). 그런 다음 해당 값에 대한 논리를 기반으로 누적 합계를 계산하십시오.

with tt as (
     select t.*, 
      (select t2.var1 
       from t t2 
       where t2.id < t.id 
       order by t2.id desc 
       limit 1 
      ) as prev_var1 
     from t 
    ) 
select tt.*, 
     (select sum(case when prev_var1 is null or prev_var1 <> var1 then 1 else 0 end) 
     from tt tt2 
     where tt2.id <= tt.id 
     ) as var2 
from tt; 

이 가정 - 질문에로 - 순서가 id 열을 기준으로 지정된다.

+0

Gordon에게 감사드립니다. - 이것은 내가 찾고있는 것입니다. 모두 제일 좋다. – brucezepplin

관련 문제