2013-03-30 1 views
0

나는 도움이 필요한 시나리오가 있습니다. 다음을 수행 할 SQL Server 2000을 사용하여 SQL 쿼리를 만들어야합니다.SQL Server 2000 그룹화 시나리오, 매 3 시간

데이터가 아래 표와 같습니다. 3 시간마다 평균 기온 상승을 결정할 방법을 찾아야합니다. 까다로운 부분은 매 3 시간 그룹은 다음과 같이해야합니다 수 있습니다 :

1st Average Grouping - (03/01/2013 13:00, 03/01/2013 14:00, 03/01/15:00) 
2nd Average Grouping - (03/01/2013 14:00, 03/01/2013 15:00, 03/01/16:00) 
3rd Average Grouping - (03/01/2013 15:00, 03/01/2013 16:00, 03/01/17:00) 


Date  Time  Temperature 
03/01/2013 13:00   75 
03/01/2013 14:00   80 
03/01/2013 15:00   82 
03/01/2013 16:00   82 
03/01/2013 17:00   81 
03/01/2013 18:00   80 

그 이상한 유스 케이스와 종이에 내려 놓고하는 비트 diffult. 평균 3 시간이지만 매시간?

나는 이것에 대한 어떤 아이디어도 크게 감사 할 것입니다.

답변

0

SQL Server 2000에서는 조인을 사용하여이 작업을 수행합니다. 그러나 조인을 더 쉽게 만들고 날짜 자료를 사용하지 않으려면 먼저 조인 키를 정의 할 것입니다.

select t1.date, t2.time, avg(t2.temperature) as avgTemp 
from (select t.*, 
      (select count(*) from t t2 where t2.date < t.date or t2.date = t.date and t2.time <= t.time 
      ) as seqnum 
     from t 
    ) t1 left outer join 
    (select t.*, 
      (select count(*) from t t2 where t2.date < t.date or t2.date = t.date and t2.time <= t.time 
      ) as seqnum 
     from t 
    ) t2 
    on t.seqnum between t2.seqnum - 2 and t.seqnum 
group by t1.date, t1.time 

최근 버전의 SQL Server에서는 (창 기능을 지원하기 때문에) 훨씬 쉽습니다. 업그레이드를 고려해보십시오.

+0

내 대답을 확인하고 이에 대한 의견을 말하기를 요청하십시오. – Brian

+0

의견에 감사드립니다. – FarscapePROJ

0

날짜 및 시간 필드가 둘 다 varchars라고 가정 할 때, 다음과 같습니다. (그들은으로 VARCHAR가없는 경우, 당신은 내가 그 두 개의 필드에서 날짜 시간을 얻을 수 아래 일을하고 불필요한 변환을 제거해야합니다) : 조인없는 방법이

select t1.[Date],t1.[Time],Avg(t2.Temp) 
from MyTable t1, MyTable t2 
where 
-- getting datetime out of date(varchar) and time(varchar) fields 
dateadd(hh,(cast(left(t1.[Time],2),(convert(datetime,t1.[Date],101))) 
between 
-- matching row from second table 
dateadd(hh,(cast(left(t2.[Time],2),(convert(datetime,t2.[Date],101))) 
and 
-- matching row plus two hrs 
dateadd(hh,2,dateadd(hh,(cast(left(t2.[Time],2),(convert(datetime,t2.[Date],101)))) 
group by t1.[Date],t1.[Time] 

확실하지 경우 ... 나는 그렇게 생각하지 않는다.

+0

나는이 실제 SQL 문을 시도하지 않았지만 게시 한 내용에서이 작업이 내가해야 할 일을 이해하는 데 도움이되었습니다. 그래서 기본적으로 당신은 내 테이블을 가져 와서 그 테이블에 결합하는 것을 말하고 있습니다. 그럼 내 Where 문은이 DateTime이 자체와 + 2 시간 사이에있는 DateTime입니다 ... 나는 이것이 효과가 있다고 생각합니다. 나는 그것을 밖으로 시도하고 알려드립니다. 감사. – FarscapePROJ