我有一个查询,它显示为结果:
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个月中的数量。
用于显示上述结果的查询如下:
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行。
请给我建议。
发布于 2016-12-16 13:11:10
如果我正确理解,您希望最近一个月的10个事件都是最高的,然后在数据中查看它们所有月份的事件。
以下是一种方法:
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起事件。
https://stackoverflow.com/questions/41185000
复制相似问题