选择每年项目数量最多的月份

  • 本文关键字:项目数 选择 sql oracle
  • 更新时间 :
  • 英文 :


我有以下场景

img

对于每一年,我想显示结束项目数量最多的月份

到目前为止,我已经尝试了以下操作:

SELECT  COUNT(proj.projno) nr_proj, extract(month from proj.end_date) month
, extract(year from proj.end_date) year
FROM PROJ
GROUP BY extract(month from proj.end_date)
,extract(year from proj.end_date)

我正在获取每月、每年项目数量的信息。有没有人能给我点提示,我如何在每一年里只选择项目数量最多的记录?

可以使用max解析函数获取每年nr_proj的最大值(按子句分区),然后只保留nr_proj = mx的行。

select t.nr_proj, t.month, t.year
from (
SELECT COUNT(proj.projno) nr_proj
, extract(month from proj.end_date) month
, extract(year from proj.end_date) year
, max( COUNT(proj.projno) ) over(partition by extract(year from proj.end_date)) mx
FROM PROJ 
GROUP BY extract(month from proj.end_date), extract(year from proj.end_date)
) t
where nr_proj = mx
;

演示

我认为下面会给你你所追求的(如果我理解的要求)。它首先统计每个月的项目,然后按年排序,最后选择第一名。

select dt "Most Projects Month", cnt "Monthly Projects"
from ( -- Rank month Count by Year 
select to_char( dt, 'yyyy-mm') dt
, cnt 
, rank() over (partition by extract(year from dt) 
order by cnt desc) rnk
from (-- count number of in month projects for each year         
select trunc(end_date,'mon') dt, count(*) cnt
from projects
group by trunc(end_date,'mon') 
)
)
where rnk = 1
order by dt;

注意:未测试,未提供数据。以后不要发布图片,请参见为什么不发布图片。

最新更新