考虑一个保存日志数据的 SQL Server 表。重要的部分是:
CREATE TABLE [dbo].[CustomerLog](
[ID] [int] IDENTITY(1,1) NOT NULL,
[CustID] [int] NOT NULL,
[VisitDate] [datetime] NOT NULL,
CONSTRAINT [PK_CustomerLog] PRIMARY KEY CLUSTERED ([ID] ASC)) ON [PRIMARY]
这里的查询是围绕一天中按小时查找访问量的分布。我们有兴趣查看给定日期范围内
每小时平均访问次数的分布。
查询结果将是这样的:
HourOfDay Avg.Visits.In.Hour 0 24 1 16 5 32 6 89 7 823 等等等等
目的是编写这样的查询:
SELECT DATEPART(hh, VisitDate)
,AVG(COUNT(*))
FROM CustomerLog
WHERE VisitDate BETWEEN 'Jan 1 2009' AND 'Aug 1 2009'
GROUP BY DATEPART(hh, VisitDate)
然而,这不是一个有效的查询:
无法对包含聚合或子查询的表达式执行聚合函数。
问题:您将如何重新编写此查询以收集平均总数(即代替AVG(COUNT(*))
小时?
想象一下,这个查询的结果将被交给一个PHB,他想知道一天中最忙的时间是什么时候。
- SQL Server 2005+