按日期时间列分组并保持平均值

时间:2013-03-04 04:28:44

标签: sql sql-server-2008

我是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 个答案:

答案 0 :(得分:1)

不确定你是否想要比Day(即课程)更低的粒度,但如果不是,我认为这应该让你到那里。如果您希望在结果中使用更多粒度,请将这些字段添加到您的选择和您的组中。

这也将考虑@@ 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)