我有以下场景
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;
注意:未测试,未提供数据。以后不要发布图片,请参见为什么不发布图片。