0

我有看起来像的数据

id   channel   amount    date
a   PHONE       50     '1sep2014'
a   PHONE      100     '1oct2014'
a   INTERNET    20     '4oct2014'
b   PHONE       25     '2oct2014'
b   INTERNET    30     '3oct2014'
c   INTERNET    35     '1oct2014'
c   INTERNET    20     '2oct2014'
c   INTERNET   100     '3oct2014'

如果可能的话,我想在一个步骤中标记出每个 id 最常见的频道。我知道如何使用 group by 和 self join 来做到这一点,但是在不使用 self join 的情况下最简单的方法是什么?

我的第一个查询中已经有一个row_number() OVER(PARTITION BY ID ORDER BY DATE DESC),因为我需要从此表中获取最新的值/通道等。如果可能的话,我想把它全部绑定到同一个查询中。

4

1 回答 1

1

您可以使用窗口函数和 a 来做到这一点group by

select id, channel
from (select id, channel, count(*) as cnt,
             row_number() over (partition by id order by count(*) desc) as seqnum
      from table t
      group by id, channel
     ) ic
where seqnum = 1;
于 2015-04-20T02:07:26.230 回答