2013-04-01 3 views
0

시스템을 켤 때마다 매일 아침 로깅 데이터를 시작하는 온도계가 있습니다.집합 함수가있는 첫 번째 레코드 선택

나는 기계가 매일 켜지거나 꺼질 때의 온도뿐만 아니라 최소, 최대 및 평균 온도를 선택하고 싶습니다.

시간 기록 된이 날짜가 기록 온도, 일에 대한 집계를 얻기 위해 로그인 한 날짜 별

I 그룹,하지만 난 좋은 방법을 찾을 수가 없어 다음과 같이

내 테이블 구조는 기록 된 첫 번째 및 마지막 시간 스탬프에서 온도를 선택합니다.

어떤 도움이 필요합니까?

답변

0

는이 같은 창 기능을 사용하려면이 두 가지 새로운 변수를 추가하고 무엇

select t.DateLogged, min(t.Temperature), max(t.Temperature), avg(t.Temperature), 
     max(case when t.seqnum_asc = 1 then t.Temperature end) as FirstTemperature, 
     max(case when t.seqnum_desc = 1 then t.Temperature end) as LastTemperature, 
from (select t.*, 
      row_number() over (partition by dateLogged order by timeLogged) as seqnum_asc, 
      row_number() over (partition by dateLogged order by timeLogged desc) as seqnum_desc 
     from t 
    ) t 
group by t.DateLogged 
order by DateLogged 

. 첫 번째 값 (seqnum_asc)으로 1에서 시작하는 값을 열거합니다. 다른 열거 형은 1 for the last reading ( seqnum_desc`입니다.

값을 얻으려면 조건부 합계가 사용됩니다. 당신이 좋아하는 경우

, 당신은 실제로 row_number()보다는, 윈도우 fucnctions로 min()max()를 사용하여 거의 같은 일을 수행 할 수 있습니다

select t.DateLogged, min(t.Temperature), max(t.Temperature), avg(t.Temperature), 
     max(case when timeLogged = mintime then t.Temperature end) as FirstTemperature, 
     max(case when timeLogged = maxtime then t.Temperature end) as LastTemperature, 
from (select t.*, 
       min(timeLogged) over (partition by dateLogged) as minTime, 
      max(timeLogged) over (partition by dateLogged) as maxTime 
     from t 
    ) t 
group by t.DateLogged 
order by DateLogged