首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSSQL:如何按查询显示组中的前10项?

MSSQL:如何按查询显示组中的前10项?
EN

Stack Overflow用户
提问于 2016-12-16 13:00:37
回答 1查看 86关注 0票数 0

我有一个查询,它显示为结果:

代码语言:javascript
复制
Year-Month  SN_NAME Raised Incidents
2015-11 A   14494
2015-11 B   8432
2015-11 D   5496
2015-11 G   4778
2015-11 H   4554
2015-11 C   4203
2015-11 X   3477
.......+ thousands more rows for 2015-11
2015-12 A   3373
2015-12 B   3322
2015-12 H   2814
2015-12 D   2745
......+ thousands more rows for 2015-12
......+ thousands more rows for 2016-01 - 2016-10
2016-11 B   2645
2016-11 C   2571
2016-11 E   2475
2016-11 D   2466
....+ thousands more rows for 2016-11

我需要从上个月的Raised_Incident计数中选择前10位的Raised_Incident,然后显示它们在过去12个月中的数量。

用于显示上述结果的查询如下:

代码语言:javascript
复制
DECLARE @startOfCurrentMonth DATETIME
SET @startOfCurrentMonth = DATEADD(month, DATEDIFF(month, 0, CURRENT_TIMESTAMP), 0)

SELECT 
    CONVERT(char(7),IM.SN_SYS_CREATED_ON,121) as "Year-Month"
    ,CI.SN_NAME
    ,COUNT(IM.SN_NUMBER) as "Raised Incidents"
FROM [dbo].[tab_IM_Incident] IM 
    LEFT JOIN [dbo].[tab_SNOW_CMDB_CI] CI on IM.SN_CMDB_CI = CI.SN_SYS_ID
WHERE 
    IM.SN_SYS_CREATED_ON >= DATEADD(month, -13, @startOfCurrentMonth) AND    IM.SN_SYS_CREATED_ON < @startOfCurrentMonth
    AND (IM.SN_U_SUB_STATE <> 'Cancelled' OR IM.SN_U_SUB_STATE IS NULL)
GROUP BY 
    CONVERT(char(7),IM.SN_SYS_CREATED_ON,121)
    , CI.SN_NAME
ORDER BY 
    CONVERT(char(7),IM.SN_SYS_CREATED_ON,121) 
    , COUNT(IM.SN_NUMBER) DESC

问题是,我不知道如何将每个月的值限制为TOP10,因为查询总共返回大约20万行,而应该返回13x10 = 130行。

预期的输出与问题的顶部完全相同,但在过去的13个月中,仅限于前10行。

请给我建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-16 13:11:10

如果我正确理解,您希望最近一个月的10个事件都是最高的,然后在数据中查看它们所有月份的事件。

以下是一种方法:

代码语言:javascript
复制
with t as (
      your query here
     )
select t.*
from (select top 10 t.*
      from t
      order by YearMonth desc, RaisedIncidents desc
     ) top10 left join
     t
     on t.sn_name = top10.sn_name
order by YearMonth desc, RaisedIncidents desc;

请注意,top 10在最近一个月没有过滤。相反,它是在最近一个月下订单的,然后是RaisedIncidents。这假定最近一个月至少发生了10起事件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41185000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档