我有一个表(log_entries):
id|token|area|
1| 543 | AA |
2| 452 | BB |
3| 543 | BB |
4| 634 | CC |
5| 436 | AA |
我想创建按标记分组的前5个区域的列表,但是使用的区域是令牌使用的最后一个区域。基本上是前5个区域的列表,其中每个令牌只获得一票,而它的投票是针对它记录的最后一个区域。
例如,对于上表,列表如下所示:
|area|count|
| BB | 2 |
| AA | 1 |
| CC | 1 |
如何在MySQL语句中执行此操作? (顺便说一下,表格大于> 50,000行)
答案 0 :(得分:0)
SQL表代表无序集。您需要另一列来指定排序。
以下是获取每个令牌的最新区域的一种方法:
select area, count(*)
from (select t.*,
(@rn := if(@t = token, @rn + 1,
if(@t := token, 1, 1)
)
) as seqnum
from t cross join
(select @rn := 0, @t := '') params
order by tokens, ??
) t
where seqnum = 1
group by area
order by count(*) desc;
您需要将??
替换为指定排序的列名,以确定最新的。