2016-02-27 137 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;