我需要在每年的Oracle SQL查询中找到最高选民

Joh*_*ohn 3 sql oracle

我有一张表让我们说排名信息

username   mvid  votedate
john        1    23-sep-90
john        2    23-sep-90
smith       1    23-sep-90
john        3    24-oct-91
smith       3    24-oct-91
smith       4    25-dec-91
smith       5    25-dec-91
Run Code Online (Sandbox Code Playgroud)

我需要在sqldeveloper(Oracle)中编写一个sql查询,这将给我每年投票数最多的成员.输出应为用户名,年份,每年的总票数.让我们考虑上面的例子:我需要这样的输出.

username  year  number_Of_Votes
john       1990    2
smith      1991    3
Run Code Online (Sandbox Code Playgroud)

因为在1990年,约翰以1票的优势击败史密斯,而在1991年史密斯以2票击败约翰.

我到了计算所有选票的地步但我无法获得一年内的最高票数.

这就是我所做的:

select r1.username, 
    Extract(year from r1.votedate)"Year",
    count(username)
from rankinginfo r1
where Extract(year from r1.votedate)  is not null
group by Extract(year from r1.votedate), 
      r1.username;
order by  Extract(year from r1.votedate),
      username;
Run Code Online (Sandbox Code Playgroud)

And*_*mar 5

select  *
from    (
        select  VotesPerUserPerYear.*
        ,       dense_rank() over (
                    partition by voteyear
                    order by votecount desc) as rn
        from    (
                select  username
                ,       extract(year from votedate) as voteyear
                ,       count(*) as votecount
                from    YourTable
                group by
                        username
                ,       extract(year from votedate)
                ) VotesPerUserPerYear
        ) SubQueryWithRank
where   rn = 1 -- Only top voter per year
Run Code Online (Sandbox Code Playgroud)

SQL Fiddle的例子.