我有一个叫做tbl_test的tbl,它不断地插入数据,每次大约有10^6条记录。
Acquire_Id (1到20之间的值),
Status_Msg( 'A‘到’Z‘之间的值),
Status_Code(1到26之间的值)
Status_Msg和Status_Code之间存在一对一的映射关系
现在,我希望获得每个收购方的两个最频繁的status_msg和Staus_Code计数(如果它们存在于表中
查询应节约成本
发布于 2015-12-21 20:45:52
大多数数据库都支持ANSI标准窗口函数。在聚合这些值之后,您可以使用row_number() (或rank()或dense_rank(),取决于ties的返回方式)获得您想要的内容。
下面为每个获取者恰好返回两行(即使有平局)。
select t.*
from (select t.acquire_id, t.status_msg, t.status_code, count(*) as cnt,
row_number() over (partition by t.acquire_id order by count(*) desc) as seqnum
from tbl_test t
group by t.acquire_id, t.status_msg, t.status_code
) t
where seqnum <= 2;https://stackoverflow.com/questions/34395986
复制相似问题