0
データセットに重複レコードがあり、私は除数にランク(As num)を行っています。私はそれをグループ化して重複がどれほど悪いかを見ている間は問題ありませんでした。しかし、私はrank = 1(rank = 1)を取得するためにクエリを実行すると、クエリが時間がかかりすぎてクラッシュします。Where Clauseとのクラッシュ
誰でも私にいくつかの洞察力を与えることができますか?
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;
出力:
--------------
Num | Count(*)
--------------
1| 302419
2| 7259
3| 471
4| 43
5| 2
はテーブルのみランク= 1を取得し、それが取る長すぎる/ crashs:
Select *
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
WHERE num=1;
2つの割り当ての代わりにconcat_wsを使用する方が効率的ですが、それでも同じです。走り続けて結果を出さないだけです。 – Toby
@Toby。 。 。効率性ではありません。それは精度についてです。 –
ありがとう@Gordon Linoff。私はSQLに新しい、私が間違っている場合は私を修正します。私は、クエリが1つの割り当てをチェックする必要がある場合は、より効率的だと思います。私はそれが精度を向上させることに同意します。 - 私が混乱していることの1つは、グループ分け後にカウントできることです。どのようにして、条件ランク= 1のデータを提示するかに問題がある。 - まだ動作していません。回避策はありますか?私は代わりにクエリを実行すると思う、私はランク付けするための列を追加することができます>任意のランク> 1を削除します。 – Toby