Ainsi, votre table est sous forme de
Order Group Sequence
1 1 4
1 1 5
1 1 7
..et vous voulez savoir que 1,1,6 est manquant?
Avec
select
min(Sequence) MinSequence,
max(Seqence) MaxSequence
from
Orders
group by
[Order],
[Group]
vous pouvez trouver les limites pour un ordre et groupe donné.
Maintenant, vous pouvez simuler les données correctes en utilisant un tableau spécial numéros, qui contient seulement tous les numéros que vous pourriez utiliser pour une séquence. Here est un bon exemple d'une telle table de nombres. Ce n'est pas important comment vous le créez, vous pouvez également créer un fichier Excel avec tous les nombres de x à y et importer cette feuille Excel.
Dans mon exemple, je suppose un tel tableau de nombres appelés « numéros » avec une seule colonne « n »:
select
[Order],
[Group],
n Sequence
from
(select min(Sequence) MinSequence, max(Seqence) MaxSequence from [Table] group by [Order], [Group]) MinMaxSequence
left join Numbers on n >= MinSequence and n <= MaxSequence
Put que SQL dans une nouvelle vue. Dans mon exemple, je vais appeler la vue "vwCorrectOrders".
Ceci vous donne les données où les séquences sont continues.Maintenant, vous pouvez joindre ces données avec les données d'origine pour savoir quelles séquences manquent:
select
correctOrders.*
from
vwCorrectOrders co
left join Orders o on
co.[Order] = o.[Order]
and co.[Group] = o.[Group]
and co.Sequence = o.Sequence
where
o.Sequence is null
devrait vous donner
Order Group Sequence
1 1 6
que sql db utilisez-vous. dans oracle son possible, vous pourriez le faire avec les fonctions de classement ... –
Microsoft Access :) – Tihauan
Les réponses ne sont pas d'accord Quelle colonne contient les données 1,2,3,4, peut-être vous pouvez clarifier avec quelques exemples. – Andomar