Okay, so aggregate functions like AVG
, MAX
, and COUNT
will require some sort of GROUP BY
if there are other fields in the SELECT
list. This is how they know what subset to operate on. So what you would need to do, to get this to run, is something like this:
SELECT dateTime,
AVG([timeTaken]) as avgtime,
MAX([timeTaken]) as maxtime,
COUNT(*) totalcalls
FROM [Logs]
WHERE
csUriStem = '/REST/Issues/Issues.svc/' AND
[dateTime] > DATEADD(MINUTE, -15, GETUTCDATE()) AND
(csUserAgent != 'Fiddler' OR csUserAgent IS NULL)
GROUP BY dateTime
However, that may, or may not, be what you want. This is going to perform the AVG
, MAX
, and COUNT
over every grouping of dateTime
.
However, this grouping of dateTime
is probably illogical; you probably want something like this:
SELECT CONVERT(VARCHAR(8), dateTime, 101) AS groupDate,
AVG([timeTaken]) as avgtime,
MAX([timeTaken]) as maxtime,
COUNT(*) totalcalls
FROM [Logs]
WHERE
csUriStem = '/REST/Issues/Issues.svc/' AND
[dateTime] > DATEADD(MINUTE, -15, GETUTCDATE()) AND
(csUserAgent != 'Fiddler' OR csUserAgent IS NULL)
GROUP BY CONVERT(VARCHAR(8), dateTime, 101)
That will format that grouping date by mm/dd/yy
.
To further consider what's actually going on with aggregate functions, if you didn't have any additional fields:
SELECT AVG([timeTaken]) as avgtime,
MAX([timeTaken]) as maxtime,
COUNT(*) totalcalls
FROM [Logs]
WHERE
csUriStem = '/REST/Issues/Issues.svc/' AND
[dateTime] > DATEADD(MINUTE, -15, GETUTCDATE()) AND
(csUserAgent != 'Fiddler' OR csUserAgent IS NULL)
it still operates over a group. That group just happens to be the entire result set.