sql server查询(最大+计数)

cld4siwp  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(270)

我目前正在对microsoft sql server进行一个快速查询,该查询应返回不同的安装,这些安装在去年发生的事件最多。
这是我目前得到的,但我知道这不是正确的方法,我希望得到一些启示:

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

谢谢

mlmc2os5

mlmc2os51#

一个简单的解决办法是 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 子句:对列使用日期函数效率较低,并且会阻止数据库使用现有索引

相关问题