SQL Запрос сервера (MAX + COUNT) - PullRequest
0 голосов
/ 18 июня 2020

В настоящее время я работаю над быстрым запросом к серверу Microsoft SQL, который должен возвращать другую УСТАНОВКУ, в которой было МАКСИМАЛЬНОЕ количество СОБЫТИЙ за последний год. что это неправильный путь и надеялся на некоторое понимание:

SELECT 
    i.idInstalac, i.nomInstalac, COUNT(e.idEvento) as cantEventos    
FROM
    Instalacion i, Eventos e    
WHERE 
    i.idInstalac = e.idInstalac 
    AND YEAR(e.fchEvento) = 2019   
GROUP BY 
    i.idInstalac, i.nomInstalac
HAVING 
    MAX cantEventos

Спасибо

1 Ответ

0 голосов
/ 18 июня 2020

Простое решение: TOP (1) WITH TIES:

SELECT TOP (1) WITH TIES i.idInstalac, i.nomInstalac, COUNT(e.idEvento) as cantEventos 
FROM Instalacion i
INNER JOIN Eventos e ON i.idInstalac = e.idInstalac 
WHERE e.fchEvento >= '2019-01-01' and e.fchEvento < '2020-01-01'
GROUP BY i.idInstalac,i.nomInstalac 
ORDER BY cantEventos DESC

Обратите внимание, что я переписал ваше неявное JOIN как явное, современное соединение (с ключевым словом ON): неявное соединение - это старый синтаксис это не должно использоваться в новом коде. Я также изменил фильтр даты в предложении WHERE: использование функций даты в столбце менее эффективно и не позволяет базе данных использовать существующий индекс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...