我有一个数据集有重复的记录,我正在做一个排名(As num)到重复数据删除。当我把它分组并看到重复有多糟糕时,它很好。但是在我运行查询以获得rank = 1(其中rank = 1)的情况下,查询需要太长时间并且崩溃。
有人能给我一些见解吗?
google.maps.event.addListener(POLYGON_ID.getPath(), "insert_at", getPath);
输出:
Select num, count(*)
FROM
(SELECT
@rank :=case
WHEN concat_ws(':', @Agent, @calltime) = concat_ws(':', Agent_Name, CallStart)
Then @rank + 1
ELSE 1
END AS num,
@calltime:=CallStart AS Callstart, @Agent := Agent_Name As AgentName
FROM granular
ORDER BY Callstart, AgentName
) clean
Group by num;
只获得一个表rank = 1并且崩溃/花费太长时间:
--------------
Num | Count(*)
--------------
1| 302419
2| 7259
3| 471
4| 43
5| 2
答案 0 :(得分:0)
您不能依赖于在两个不同表达式中发生的变量赋值。计算排名的正确方法是将所有变量表达式组合成单个表达式。我会把表达式写成:
SELECT g.*
FROM (SELECT g.*,
(@rn := if(@at = concat_ws(':', Agent_name, CallStart), @rn + 1,
if(@at := concat_ws(':', Agent_name, CallStart), 1, 1)
)
) as rn
FROM granular g CROSS JOIN
(SELECT @rn := 0, @at := '') params
ORDER BY Callstart, AgentName
) g
WHERE rn = 1;
也许这会解决你的问题。