1

数十万のレコードを持つ巨大なテーブルがあります。それらはすべて、最初の列に一意の ID を持っていますが、番号のシーケンスに欠けているものもあります。

個々に欠落している番号のリストを表示しようとしています。

たとえば、次のようになります。

10029
10032
10034
10036

私はそれを表示しようとしています:

10030
10031
10033
10035

このクエリを見つけましたが、範囲がある場合に数字が欠落しているようです:

SELECT t1.id+1 AS Missing 
FROM data AS t1 
LEFT JOIN data AS t2 
    ON t1.id+1 = t2.id 
WHERE t2.id IS NULL 

結果:

10030
10033

ご覧のとおり、10031 と 10035 がそのリストにありません。

4

1 に答える 1

0

おそらく、出発点としてこのようなものがあります。テストされていませんが、うまくいくかもしれません

SELECT @min := (SELECT min(id) FROM yourtable); // get the smallest ID in the table
SELECT @last := @min; // cache the min value for the where clause

SELECT id, id - @last AS difference, @last := id
FROM yourtable
WHERE id > @min
ORDER BY id ASC
HAVING difference > 1

欠落している個々の ID は表示されませんが、ギャップがどこにあり、どれくらい大きいかがわかります。

于 2013-07-25T15:04:54.427 に答える