ログ データを保持する 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]
ここでのクエリは、1 日の時間ごとの訪問数の分布を見つけることに関するものです。特定の日付範囲における
1 時間の平均訪問数の分布を確認したいと考えています。
クエリの結果は次のようになります。
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(*))
、1 時間の代わりに?
このクエリの結果が、1 日の最も忙しい時間を知りたいPHBに渡されると想像してください。
- SQL Server 2005 以降