2016-02-27 110 views
0

问题是:对于每一天,列出已阅读最多消息数的用户标识。Oracle嵌套分组

user_id msgID read_date 
1   1  10 
1   2  10 
2   2  10 
2   2  23 
3   2  23 

我相信,日期是外组和user_id是内部组,但怎么做组嵌套在SQL?或以某种方式避免这一点?

回答

1

这是一个窗函数任务:

select * 
from 
(
    select user_id, read_date, count(*) as cnt, 
     rank() 
     over (partition by read_date   -- each day 
      order by count(*) desc) as rnk -- maximum number 
    from tab 
    group by user_id, read_date 
) dt 
where rnk = 1 

这可能返回多个用户提供一个具有相同的最大数,如果你只想要一个(随机)切换到ROW_NUMBER

+0

很好的回答@dnoeth,但你已经有了'分区'的spello :) –

+0

@GordonLinoff:感谢您发现... – dnoeth

+0

@dnoeth这正是我想要的。非常感谢! – tic30

0
select user_id 
from 
(
    select user_id,count(msgID) 
    from table 
    group by read_date 
) 
where rownum <= 1;