如何在SQL Server中查询拥有最高日期频次的城市?
解决方案
给你几种SQL Server下的实现方法,按需选就行:
方法一:用TOP 1 WITH TIES直接获取
这种方法能直接返回所有频次最高的记录(包括多个城市并列第一的情况):
SELECT TOP 1 WITH TIES D.CANTON, D.FECHA, COUNT(D.FECHA) AS FRECUENCIA FROM [dbo].[DETENCION] D GROUP BY D.CANTON, D.FECHA ORDER BY FRECUENCIA DESC
执行后,所有FRECUENCIA等于全局最大值的行都会被返回,对应的CANTON就是你要找的城市。
方法二:窗口函数RANK()筛选排名第一的城市
如果只需要城市名称(不需要对应的日期和频次),可以用窗口函数先算好全局排名,再筛出排名第一的:
WITH RankedDetenciones AS ( SELECT D.CANTON, COUNT(D.FECHA) AS FRECUENCIA, RANK() OVER (ORDER BY COUNT(D.FECHA) DESC) AS RankNum FROM [dbo].[DETENCION] D GROUP BY D.CANTON, D.FECHA ) SELECT DISTINCT CANTON FROM RankedDetenciones WHERE RankNum = 1
要是需要保留日期和频次信息,去掉DISTINCT就行。
方法三:先查最大频次再匹配对应城市
先找出全局最高的频次值,再关联查询对应的城市记录,逻辑清晰,适合分步看中间结果:
DECLARE @MaxFrecuencia INT; SELECT @MaxFrecuencia = MAX(FRECUENCIA) FROM ( SELECT COUNT(D.FECHA) AS FRECUENCIA FROM [dbo].[DETENCION] D GROUP BY D.CANTON, D.FECHA ) AS Frecuencias; SELECT D.CANTON, D.FECHA, COUNT(D.FECHA) AS FRECUENCIA FROM [dbo].[DETENCION] D GROUP BY D.CANTON, D.FECHA HAVING COUNT(D.FECHA) = @MaxFrecuencia;
内容的提问来源于stack exchange,提问作者Mr M
相关产品推荐
相关产品推荐

