Maison >base de données >tutoriel mysql >Comment puis-je trouver le premier écart dans une colonne de compteur en cours à l'aide de SQL ?

Comment puis-je trouver le premier écart dans une colonne de compteur en cours à l'aide de SQL ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-13 11:22:44769parcourir

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

Utilisez SQL pour identifier les lacunes dans l'exécution des compteurs

Trouver des lacunes dans les colonnes des compteurs d'exécutions est une tâche courante dans l'analyse des données. En SQL, il existe plusieurs façons d'y parvenir, en proposant des solutions standards compatibles avec différents SGBD.

Trouver le premier écart

Le but est d'identifier le plus petit entier positif manquant dans la colonne du compteur. Par exemple, étant donné [1, 2, 4, 5], l'écart est de 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 Serveur

<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>

Oracle

<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 (le plus courant)

<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>

Fonction de fenêtre coulissante (si prise en charge)

<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>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn