Identifier les lacunes dans les compteurs SQL
Dans l'analyse des données, il est courant de rencontrer des lacunes dans la séquence d'exécution des valeurs des compteurs. Déterminer l'emplacement de ces lacunes peut aider à identifier les points de données manquants ou à détecter des anomalies. Pour satisfaire ce besoin, explorons un moyen de localiser la première encoche dans une colonne de compteur à l'aide de SQL.
Requête SQL pour la détection des écarts
Pour divers systèmes de gestion de bases de données (SGBD), nous pouvons exploiter une syntaxe SQL spécifique pour trouver la première encoche dans une colonne de compteur :
MySQL et 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 SQL (le moins efficace) :
<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>
Systèmes prenant en charge les fonctions de fenêtre coulissante :
<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>
Cette requête récupère le premier écart en sélectionnant la première instance manquant les valeurs des compteurs suivants. Il utilise des techniques efficaces telles que des sous-requêtes négatives, des fonctions de fenêtre ou ANSI SQL selon les capacités du SGBD.
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!