2014-12-10 198 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技能是相當薄弱:-)

BONUS

這將是真棒,如果答案將包括同樣的問題的變化:通過計算平均值平日小時,不僅小時:

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)子句? – 2014-12-10 21:47:42

回答

2

您可以使用datenamedatepartgroup 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;