【发布时间】:2012-05-06 17:59:51
【问题描述】:
背景
我在 SQL Server 环境中设置了一个表,其中包含我正在跟踪的各种活动的日志。特定日志项使用唯一代码对正在发生的活动进行分类,并使用日期时间字段跟踪该活动发生的时间。
问题
我想使用单个查询或存储过程来获得按星期几分组的平均每小时活动计数。示例:
Day | Hour | Average Count
-------------------------------
Monday | 8 | 5
Monday | 9 | 5
Monday | 10 | 9
...
Tuesday | 8 | 4
Tuesday | 9 | 3
...etc
现在,我有一个查询设置,可以输出每天每小时的计数,但我的问题是更进一步,并按一周中的每一天计算平均值。这是我当前的查询:
SELECT CAST([time] AS date) AS ForDate,
DATEPART(hour, [time]) AS OnHour,
COUNT(*) AS Totals
FROM [log] WHERE [code] = 'tib_imp.8'
GROUP BY CAST(time AS date),
DATEPART(hour,[time])
ORDER BY ForDate Asc, OnHour Asc
关于我如何实现这一点的任何建议?
提前致谢!
【问题讨论】:
-
按weekday分组即可。
-
这会平均计数吗?
-
不,如果你想对计数进行平均,那么你必须先进行计数,然后对结果进行平均:
select field, avg(countField) from ( select field, count(*) as countField group by field) result group by field -
如果您提供一些源数据(例如,您如何达到 5),我们将更好地了解您希望如何获得总计、平均值或总计的平均值。单词问题有点模棱两可,没有源数据很难确定 5,5,9 等的来源。
标签: sql sql-server count group-by