2013-03-04 85 views
1

我是SQL新手,在這裏面臨一個問題。我想我明白我可能需要做的事情,但不瞭解它的語法。基本上我每小時都有大量的計數,我需要把所有這些小時數統統加入到一起來顯示,而不是按小時計算,然後再計算整個天數的平均值。我還需要理清這些日子中的哪些是平日並排除週末......我認爲我已經正確地完成了,但是我可能在這方面是錯誤的。如果有更高效的方式,請告訴我!按日期時間列分組並保持平均值

SELECT DatePart(WEEKDAY, [EVENT_TIME]) as DayoftheWeek 
,[EVENT_TIME] 
,[COUNT] 
,[CLASS_SCHEME_ID] 
,[CLASS_NUM] 
,[ERROR_CODE] 
,[REC_ENTRY_TIME] 
FROM [SAMPLE_DATA].[dbo].[651511] 
WHERE [EVENT_TIME] >= '2009-01-01' AND DatePart(WEEKDAY, [EVENT_TIME]) >=2 AND DatePart(WEEKDAY, [EVENT_TIME]) <= 6 
GROUP BY ,[EVENT_TIME] 
,[COUNT] 
,[CLASS_SCHEME_ID] 
,[CLASS_NUM] 
,[ERROR_CODE] 
,[REC_ENTRY_TIME] 
GO 

我一直在閱讀我可能需要做的事情......關於鑄造的一些事情可能是?我不確定。

回答

1

不知道你是否想要比天(即類)更低的粒度,但如果不是,我認爲這應該讓你在那裏。如果您希望獲得更精確的結果,請將這些字段添加到您的選擇和您的分組中。

這也將考慮到@@ DATEFIRST

SELECT 
    DatePart(Weekday, event_time) as DayName, 
    avg(count) as DayAvg 
FROM 
    sample_date.dbo.651511 
WHERE 
    event_time >= '2009-01-01' and 
    (DATEPART(dw, date_created) + @@DATEFIRST) % 7) NOT IN (0, 1) 
Group by 
    DatePart(Weekday, event_time) 
+0

嗨傑森的任何非默認設置,感謝這個!這幾乎是正確的,但在第8行我一直在','(我相信它是DATEPART函數中的第一個''')出現語法錯誤,不知道這是爲什麼,並且在運行後出現 'SELECT @@ VERSION ' 我有SQL 2005正在運行...有人告訴我這是2008年。不知道有多少差異,使得。 – 2013-03-04 20:56:05

+0

@MatthewPaxman:這個查詢確實有問題,但它們與逗號或無關版本的SQL Server(至少,一旦問題得到解決,查詢應該在SQL Server 2005中運行,就像在SQL Server 2008中一樣好)問題是:1)表名不分隔,2)WHERE中的DATEPART表達式在開始處缺少兩個開頭的括號,3)在查詢結尾處的反引號。查詢*中的GROUP BY列表也以逗號開頭。這可能是一個錯字,就像這個查詢中的倒退一樣,但它可能會意外地進入了您正在嘗試的查詢中。 – 2013-03-05 16:47:23