Requête SQL manque des numéros consécutifs
J'ai les données suivantes dans une Table SQL:
J'ai besoin d'interroger les données afin que je puisse obtenir une liste de manquants "familyid" par employé.
Par exemple, je devrais obtenir pour l'Employé 1021 qui est manquant dans la séquence Id: 2 et 5, et pour les Employé-e 1027 devriez obtenir les numéros manquants 1 et 6.
Aucun indice sur la façon de requête?
Reconnaissant de toute aide.
- nous ne pouvons pas voir l'ensemble de la colonne des noms
- La dernière colonne nom est "familyid".
- et la 3ème colonne et le nom de la table?
- numéro d'employé
- employee_number désolé
- employee_members
- Une chance cette grille est un produit d'une jointure entre deux tables? Faire une jointure externe, et de voir ce qui se passe...
- Que faire si le dernier membre est absent?
Vous devez vous connecter pour publier un commentaire.
Trouver la première valeur manquante
Je voudrais utiliser le
ROW_NUMBER
fonction fenêtre pour attribuer le "bon" ordre numéro d'identification. En supposant que l'ID de séquence redémarre à chaque fois l'ID de l'employé changements:Ensuite, je voudrais filtrer le résultat pour inclure uniquement les lignes avec le décalage de la séquence Id:
Puis à nouveau, vous devriez facilement en groupe par
employee_number
et de trouver la première manquant ID de séquence pour chaque employé:Trouver toutes les valeurs manquantes
L'extension de la requête précédente, nous pouvons détecter une valeur manquante à chaque fois que la différence entre
familyid
etsequenceid
changements:Ici est une approche. Calculer le maximum de la famille id pour chaque employé. Puis ce joindre à une liste de numéros jusqu'à concurrence de l'identité des membres de famille. Le résultat a une ligne pour chaque employé et attendus de la famille id.
Faire un
left outer join
de ce retour à l'origine des données, sur lafamilyid
et le nombre. Où rien ne correspond, ceux sont les valeurs manquantes:Noter que cela ne fonctionnera pas lorsque le manque
familyid
est le dernier numéro de la séquence. Mais c'est peut être le meilleur que vous pouvez faire avec votre structure de données.Également la requête ci-dessus suppose qu'il y a au plus 20 membres de la famille.
Cela fonctionne, vous sélectionnez tous les "personnes à Charge" et left join sur l'état de la ligne. Si cette ligne n'est pas là, puis vous montrer le résultat:
Une autre version qui vous montre le nombre manquant:
Une autre solution:
Construire un tableau avec toutes les valeurs possibles de la séquence (pouvez jouer avec l'identité de cette dernière). Puis à gauche jointure sur la table où table source est nulle.
Cette sélection permettra de récupérer la liste des disparus "familyid" par des employés à l'aide de CTE approche.
REQUÊTE :
De SORTIE :