sql 如何从窗口函数中提取最常见的值

sql how to extract the most common of values from a windowing function

我的数据看起来像

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 joining 来做到这一点,但是不使用 self join 最简单的方法是什么?

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

您可以使用 window 函数和 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;