使用Where子句排名崩溃

时间:2017-01-02 22:50:33

标签: mysql crash rank

我有一个数据集有重复的记录,我正在做一个排名(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

1 个答案:

答案 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;

也许这会解决你的问题。