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 categ
; WITH a AS (
SELECT CAST([time] AS date) AS ForDate
, DATEPART(hour, [time]) AS OnHour
, txtW=DATENAME(WEEKDAY,[time])
, intW=DATEPART(WEEKDAY,[time])
, Totals=COUNT(*)
FROM [log] WHERE [code] = 'tib_imp.8'
GROUP BY CAST(time AS date)
, DATENAME(WEEKDAY,[time])
, DATEPART(WEEKDAY,[time])
, DATEPART(hour,[time])
)
SELECT [Day]=txtW
, [Hour]=OnHour
, [Average Count]=AVG(Totals)
FROM a
GROUP BY txtW, intW, OnHour
ORDER BY intW, OnHour
Guessing here:
SELECT [Day], [Hour], [DayN], AVG(Totals) AS [Avg]
FROM
(
SELECT
[Day] = DATENAME(WEEKDAY, [time]),
[DayN] = DATEPART(WEEKDAY, [time]),
[Hour] = DATEPART(HOUR, [time]),
Totals = COUNT(*)
FROM dbo.[log]
WHERE [code] = 'tib_imp.8'
GROUP BY
DATENAME(WEEKDAY, [time]),
DATEPART(WEEKDAY, [time]),
DATEPART(HOUR, [time])
) AS q
GROUP BY [Day], [Hour], [DayN]
ORDER BY DayN;
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:
SELECT [Day], [Hour], [DayN], AVG(Totals) AS [Avg]
FROM
(
SELECT
w = DATEDIFF(WEEK, 0, [time]),
[Day] = DATENAME(WEEKDAY, [time]),
[DayN] = DATEPART(WEEKDAY, [time]),
[Hour] = DATEPART(HOUR, [time]),
Totals = COUNT(*)
FROM dbo.[log]
WHERE [code] = 'tib_imp.8'
GROUP BY
DATEDIFF(WEEK, 0, [time]),
DATENAME(WEEKDAY, [time]),
DATEPART(WEEKDAY, [time]),
DATEPART(HOUR, [time])
) AS q
GROUP BY [Day], [Hour], [DayN]
ORDER BY DayN;
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).