2014-12-10 6 views
0

저는 SQL 녀석이 아니므로, 제가하려고하는 것이 간단하지만, 쉬운 해결책을 찾을 수 없습니다.시간 간격으로 값의 시간당 평균을 계산하십시오.

두 날짜 사이에 일련의 시간별 데이터가 있습니다. 이런 식으로 뭔가 :

DATETIME   VALUE 
------------------------- 
2014-01-01 01:00 104 
2014-01-01 02:00 56 
... 
2014-01-04 23:00 65 
2014-01-05 00:00 145 

나는, 각 시간이며, 그 시간에 매일의 값의 평균을 받고, 그래서 나는 이런 식으로 뭔가으로 쿼리를 종료하려면 무엇 :

01:00 67.65 
02:00 43.00 
.... 
00:00 89.45 

"01:00"값은 매일의 모든 "01:00"값의 평균입니다.

알고리즘은 간단하지만 내 SQL 기술은 매우 약한 :-)에게 있습니다

보너스

대답이 같은 문제의 변형을 포함한다면 그것은 좋지 않을까 기준 : 평균 계산을 평일과 시간, 그리고뿐만 아니라 시간에 의하여 :

Monday 01:00 34.23 
Monday 02:00 54.34 
... 
Monday 23:00 241.34 
Tuesday 00:00 89.43 
.... 
Sunday 23:00 49.33 
+0

['GROUP BY'] (http://www.sqlteam.com/article/how-to-use-group-by-in-sql-server) 절에 익숙합니까? –

답변

2

당신은 datename, datepartgroup by

을 사용할 수 있습니다
select datename(weekday, [datetime]) as [Day], 
     datepart(hour, [datetime]) as [Hour], 
     avg(value) as AvgValue, 
     datepart(weekday, [datetime]) as [DayNo] 
from table1 
group by datename(weekday, [datetime]), datepart(weekday, [datetime]), 
     datepart(hour, [datetime]) 
order by datepart(weekday, [datetime]), datepart(hour, [datetime]) 
0

다음은 시간 간격별로 그룹화하는 데 사용할 수있는 일반 집계 쿼리의 예입니다.

WITH intervals AS (
    SELECT DATEADD(hour, DATEDIFF(hour, '', DATETIME), '') AS TimeInterval 
    ,VALUE 
    FROM dbo.Foo 
    ) 
SELECT 
     TimeInterval 
    , DATENAME(weekday, TimeInterval) AS Weekday 
    , CAST(TimeInterval AS time) 
    , AVG(VALUE) AS AvgValue 
FROM intervals 
GROUP BY TimeInterval 
ORDER BY TimeInterval; 
관련 문제