1

重複の可能性:
SQLのグループ内で欠落している値を順番に見つける方法は?

次のような値を持つ列があります

MAC00006300
MAC00006301
MAC00006302
MAC00006305
.....
LED00006002
...........
LED00006008
ALD18965
ALD18967
ALD18968
.......
ALD19000

値の間に欠落が必要です

MAC00006303,MAC00006304 
LET00006003 ..... LET00006007
ALD18969,ALD18970.....ALD18989

SELECT NAME, VALUE + 1
FROM testmissingexampledata  mo
WHERE   NOT EXISTS
        (
        SELECT  NULL
        FROM    testmissingexampledata mi 
        WHERE   mi.VALUE = mo.VALUE + 1
        )
ORDER BY
        VALUE;

上記のクエリを実行すると、次の欠落レコードのみを取得できました。不足しているすべてのレコードを取得する方法を誰かに提案できますか?

4

1 に答える 1

1

対象となる可能性のあるすべての数値のリストがないと、欠落している行を返すことはできませんLEFT JOIN

このクエリ (より良く/より強く/より速くなるように感じますが、機能します) はギャップを見つけます:

set @last_prefix = null;
set @last_value = null;
select result from (
    select @last_prefix, @last_value, name,
      @prefix := substring(name,1,3) as prefix,
      @value := substring(name,4) as value,
      case when @prefix = @last_prefix and @value != @last_value +1
        then concat ("gap from ", @prefix, ": ", @last_value+1, " to ", @value-1)
        else "ok" end as result,
      @last_prefix := @prefix, @last_value := @value
      from t20120921
) foo
where result != "ok";
于 2012-09-21T16:42:49.290 に答える