2016-08-04 2 views
0

연속 된 날짜 블록 수의 순위를 매기려고 시도하고 있지만,이를 수행하는 가장 좋은 방법은 무엇입니까? 아래의 예는 연속되는 첫 번째 3 개의 블록을 보여 주며 그 다음 4 개는 그 사이에 한 달을두고 있으므로 카운팅이 다시 시작됩니다. 다음 행 번호연속 된 날짜 블록에 의한 SQL 랭킹

StartDate | EndDate |Rank 
    ----------+-----------+---- 
    01/01/2016| 01/02/2016| 1 
    01/02/2016| 01/03/2016| 2 
    01/03/2016| 01/04/2016| 3 
    01/05/2016| 01/06/2016| 1 
+0

예상되는 결과는 무엇입니까? – jonju

답변

1

당신은 그룹이 그룹을 식별하는 데 누적 합계를하고, 시작되는 위치를 확인하여이 작업을 수행 할 수 있습니다, 그리고 :

select t.*, 
     row_number() over (partition by grp order by startdate) as rank 
    from (select t.*, 
       sum(case when tprev.startdate is null then 1 else 0 end) over (order by startdate) as grp 
     from t left join 
      t tprev 
      on t.startdate = tprev.enddate 
     ) t; 

데이터는 내가 주문하려고 해요

이 특정 SQL은 사용자가 제시 한 데이터에 적용됩니다. 하루 이상 중복되는 데이터 나 같은 날에 시작하는 여러 레코드를 처리하지 않습니다. 이것들은 처리 될 수 있습니다. 데이터가 그 이상인 경우 또 다른 적절한 데이터가 포함 된 질문을하십시오.

+0

나는 그것이 결국이 방법을 정확하게 수행하지는 않았지만 이것은 효과가있을 것이라고 생각하지만, 여전히 순위와 사례 문을 사용했지만이 경우 수술 후에 내부 순서 부분을 사용하지 않았다. 누락 된 부분 시작 날짜와 종료 날짜에 합류하여 동일한지 확인했습니다. 감사 – user3691566