Eri*_*der 1 sql sql-server filter
我有一个使用SQL 2005返回正确结果集的查询.它如下:
select
case
when convert(varchar(4),datepart(yyyy,bug.datecreated),101)+ ' Q' +convert(varchar(2),datepart(qq,bug.datecreated),101) = '1969 Q4' then '2009 Q2'
else convert(varchar(4),datepart(yyyy,bug.datecreated),101)+ ' Q' +convert(varchar(2),datepart(qq,bug.datecreated),101)
end as [Quarter],
bugtypes.bugtypename,
count(bug.bugid) as [Total]
from bug left outer join bugtypes on bug.crntbugtypeid = bugtypes.bugtypeid and bug.projectid = bugtypes.projectid
where
(bug.projectid = 44
and bug.currentowner in (-1000000031,-1000000045)
and bug.crntplatformid in (42,37,25,14))
or
(bug.projectid = 44
and bug.currentowner in (select memberid from groupmembers where projectid = 44 and groupid in (87,88))
and bug.crntplatformid in (42,37,25,14))
group by
case
when convert(varchar(4),datepart(yyyy,bug.datecreated),101)+ ' Q' +convert(varchar(2),datepart(qq,bug.datecreated),101) = '1969 Q4' then '2009 Q2' else convert(varchar(4),datepart(yyyy,bug.datecreated),101)+ ' Q' +convert(varchar(2),datepart(qq,bug.datecreated),101)
end,
bugtypes.bugtypename
order by 1,3 desc
它生成一个精美分组的年份和季度列表,一个关联的描述符,以及按降序计数顺序的事件计数.我想做的是进一步过滤这个,所以它只显示每季度提交的10个最常见的事件.
我正在努力的是如何采用这个结果集并实现这一目标.
您已按季度和总计订购.你尝试过使用过:
SELECT TOP 10
Run Code Online (Sandbox Code Playgroud)
.....其余的查询
编辑: 阅读你的评论后,我意识到你需要使用RANK和Partition来完成这项工作.您可以在CTE中进行换行,如下所示:
;WITH IncidentsTable AS
(
... Insert Your Query here ...
)
SELECT * FROM
(
SELECT [Quarter],
BugTypeName,
Total,
Rank() OVER (Partition BY [Quarter] order by Total DESC) AS Ranking
FROM
IncidentsTable
)
WHERE
Ranking <= 10
ORDER BY
Quarter, Total;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
959 次 |
| 最近记录: |