Background
I have a table set up in a SQL Server environment that contains a log of various activity that I’m tracking. Particular log items use unique codes to categorize what activity is taking place and a datetime field tracks when that activity occurred.
Problem
I would like to, using either a single query or a stored procedure, get an average of hourly counts of activity, grouped by day of the week. Example:
Day | Hour | Average Count
-------------------------------
Monday | 8 | 5
Monday | 9 | 5
Monday | 10 | 9
...
Tuesday | 8 | 4
Tuesday | 9 | 3
...etc
Right now I’ve got a query setup that spits out the counts per hour per day, but my problem is taking it a step further and getting average by day of week. Here’s my current query:
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
Any suggestions as to how I might accomplish this?
Thanks in advance!
Guessing here:
Again, without data, I might once again be throwing a handful of mud at the wall and hoping it sticks, but perhaps what you need is:
This is also going to produce integer-based averages, so you may want to cast the Totals alias on the inner query to DECIMAL(something,something).