Heim >Datenbank >MySQL-Tutorial >Wie kann ich mithilfe von SQL die erste Lücke in einer laufenden Zählerspalte finden?

Wie kann ich mithilfe von SQL die erste Lücke in einer laufenden Zählerspalte finden?

Susan Sarandon
Susan SarandonOriginal
2025-01-13 11:22:44769Durchsuche

How Can I Find the First Gap in a Running Counter Column Using SQL?

Verwenden Sie SQL, um Lücken in laufenden Zählern zu identifizieren

Das Finden von Lücken in Laufzählerspalten ist eine häufige Aufgabe bei der Datenanalyse. In SQL gibt es mehrere Möglichkeiten, dies zu erreichen, indem Standardlösungen bereitgestellt werden, die mit verschiedenen DBMS kompatibel sind.

Finden Sie die erste Lücke

Das Ziel besteht darin, die kleinste fehlende positive Ganzzahl aus der Zählerspalte zu identifizieren. Wenn beispielsweise [1, 2, 4, 5] gegeben ist, beträgt die Lücke 3.

MySQL, PostgreSQL

<code class="language-sql">SELECT  id + 1
FROM    mytable mo
WHERE   NOT EXISTS
        (
        SELECT  NULL
        FROM    mytable mi 
        WHERE   mi.id = mo.id + 1
        )
ORDER BY
        id
LIMIT 1</code>

SQL Server

<code class="language-sql">SELECT  TOP 1
        id + 1
FROM    mytable mo
WHERE   NOT EXISTS
        (
        SELECT  NULL
        FROM    mytable mi 
        WHERE   mi.id = mo.id + 1
        )
ORDER BY
        id</code>

Orakel

<code class="language-sql">SELECT  *
FROM    (
        SELECT  id + 1 AS gap
        FROM    mytable mo
        WHERE   NOT EXISTS
                (
                SELECT  NULL
                FROM    mytable mi 
                WHERE   mi.id = mo.id + 1
                )
        ORDER BY
                id
        )
WHERE   rownum = 1</code>

ANSI (am häufigsten)

<code class="language-sql">SELECT  MIN(id) + 1
FROM    mytable mo
WHERE   NOT EXISTS
        (
        SELECT  NULL
        FROM    mytable mi 
        WHERE   mi.id = mo.id + 1
        )</code>

Schiebefensterfunktion (falls unterstützt)

<code class="language-sql">SELECT  -- TOP 1
        -- 解除SQL Server 2012+的以上注释
        previd + 1
FROM    (
        SELECT  id,
                LAG(id) OVER (ORDER BY id) previd
        FROM    mytable
        ) q
WHERE   previd <> id - 1
ORDER BY
        id
-- LIMIT 1
-- 解除PostgreSQL的以上注释</code>

Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von SQL die erste Lücke in einer laufenden Zählerspalte finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn