Я пытаюсь отобразить наибольшее количество ошибок из результатов группы по запросу
Я думаю, что у меня правильная начальная группа, но не могу определить подзапрос, чтобы подсчитать количество ошибок по модулю и отфильтровать самые высокие значения.
SELECT Code AS Module
, ErrCode As ErrorCode
, Count(ErrCode) AS ErrorCount
, CAST([Msg-EN] as varchar(max)) as ErrorMsg
FROM ViewAllAlarm
WHERE RiseTime >= DateAdd(Hour, -12, GetDate())
GROUP BY Code, ErrCode, CAST([Msg-EN] as varchar(max))
Order by Module ASC
Результат:
Module | ErrorCode | ErrorCount | ErrorMsg
-------+-----------+------------+---------
F108 | 194 | 127 | Error2
F108 | 358 | 209 | Error1
F109 | 129 | 11 | Error3
F110 | 129 | 200 | Error3
F110 | 358 | 300 | Error1
F111 | 358 | 2 | Error1
F111 | 129 | 5 | Error3
F112 | 129 | 12 | Error3
F113 | 358 | 200 | Error1
F114 | 194 | 300 | Error2
Теперь мне нужно подсчитать количество ошибок (ErrorCount) по модулям и отобразить модули с наибольшим количеством (топ 5).
Это дает 336 ошибок для F108, 11 для F109, 500 для F110 и т. Д. Я хочу показать пять модулей с наибольшим количеством ошибок: F110 (500), F108 (336), F114 (300), F113 (200), F112 (12). Модули F129 (11) и F111 (7) не должны отображаться.
Module | ErrorCode | ErrorCount | ErrorMsg
-------+-----------+------------+---------
F108 | 194 | 127 | Error2
F108 | 358 | 209 | Error1
F110 | 129 | 200 | Error3
F110 | 358 | 300 | Error1
F112 | 129 | 12 | Error3
F113 | 358 | 200 | Error1
F114 | 194 | 300 | Error2
Это на сервере MS 2016 SQL.