Sql 获取n个最频繁的值

Sql 获取n个最频繁的值,sql,sql-server,Sql,Sql Server,我正在使用MS SQL,我想得到给定字段的n个最频繁值。 当前查询是: SELECT DISTINCT e.message FROM monitor_main m inner join monitor_event e on (e.mainId = m.id) WHERE e.statement = @statement and m.dateStart >= @dateStart and m.dateEnd <= @dateEnd 选择不同的电子邮件 从监视器\u main m内部

我正在使用MS SQL,我想得到给定字段的n个最频繁值。 当前查询是:

SELECT DISTINCT e.message
FROM monitor_main m inner join monitor_event e on (e.mainId = m.id)
WHERE 
e.statement = @statement
and m.dateStart >= @dateStart
and m.dateEnd <= @dateEnd
选择不同的电子邮件
从监视器\u main m内部连接监视器\u事件e on(e.mainId=m.id)
哪里
e、 语句=@语句
和m.dateStart>=@dateStart
和m.dateEnd=@dateStart

和m.dateEnd您不需要
选择DISTINCT
,您需要
DESC
作为
订购人

SELECT e.message, COUNT(e.message)
FROM monitor_main m INNER JOIN
     monitor_event e 
     ON e.mainId = m.id
WHERE e.statement = @statement AND
      m.dateStart >= @dateStart AND
      m.dateEnd <= @dateEnd
GROUP BY e.message
ORDER BY COUNT(e.message) DESC
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
选择e.message,计数(e.message)
来自监视器\u main m内部联接
监视事件e
在e.mainId=m.id上
其中e.statement=@语句和
m、 dateStart>=@dateStart和

m、 dateEnd如果您使用的是MS SQL,为什么要将问题标记为Oracle?我把标签修好了,但我很好奇。
SELECT e.message, COUNT(e.message)
FROM monitor_main m INNER JOIN
     monitor_event e 
     ON e.mainId = m.id
WHERE e.statement = @statement AND
      m.dateStart >= @dateStart AND
      m.dateEnd <= @dateEnd
GROUP BY e.message
ORDER BY COUNT(e.message) DESC
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;