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
Libérer: 2025-01-13 11:22:44
original
821 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal