2017-12-11 25 views
0

흥미로운 문제가 발생했습니다. 프로덕션 환경 내의 특정 이벤트에 에너지 사용량 로그를 다시 연결하려고 시도하고 있습니다. 생산 데이터는 약 6 개월 동안 기록되었으며, 기록 된 데이터는 30 초마다 또는 변경시 기록을 삽입합니다. 나는 시작과 끝 타임 스탬프 난을 일단SQL Server에서 특정 조건이 계속되는 시작 및 종료 시간을 찾는 방법

row mode start_t_stamp  end_time_stamp 
------------------------------------------------------ 
1  10  11/12/17 21:00:00 11/12/17 21:00:30 
2  80  11/12/17 21:01:00 12/12/17 03:04:30 
3  10  12/12/17 03:05:00 12/12/17 03:06:30 

: 나는 같은 결과를 반환하는 쿼리를하고 싶습니다

t_stamp    tag  value 
---------------------------------- 
11/12/17 21:00:00 mode 10 
11/12/17 21:00:30 mode 10 
11/12/17 21:01:00 mode 80 
11/12/17 21:01:30 mode 80 
11/12/17 21:02:00 mode 80 
11/12/17 21:02:30 mode 80 
….     mode 80 
12/12/17 03:03:30 mode 80 
12/12/17 03:04:00 mode 80 
12/12/17 03:04:30 mode 80 
12/12/17 03:05:00 mode 10 
12/12/17 03:05:30 mode 10 
12/12/17 03:06:00 mode 10 
12/12/17 03:06:30 mode 10 

: 이러한 로그 '공장 모드'에서 또한 다음과 같은 구조로 기록됩니다 예를 들어, 유휴, 워밍업, ready_standby, 생산 등의 각 모드의 에너지 사용량 데이터를 추출하여 각 모드의 평균 사용량을 구성 할 수 있지만 모든 첫 번째 단계에서 멈추지 만, 파티션을 쳐다 보면서 섬과 틈새에 대한 기사를 읽었지만이 방법으로 데이터가 기록되는 예제를 찾을 수 없습니다. 모든 제안은 멋질 것입니다

답변

1

간격 및 섬 문제입니다. 당신은 윈도우 기능을 사용할 수있는 경우에 당신은 다음과 같은

select value, 
     min(t_stamp) start_t_stamp , 
     max(t_stamp) end_time_stamp 
from 
(
    select *, row_number() over (partition by value order by t_stamp) - 
       row_number() over (order by t_stamp) grn 
    from data 
) t 
group by value, grn 

기본적인 아이디어는 동일 value와 이에 따른 행이 동일한 grn을 것입니다 사용할 수 있습니다. 이것을 가지고 쉽게 그룹화 할 수 있습니다.