Il existe un moyen relativement efficace de déterminer si les données sont correctes - enfin presque. Il déterminera s'il manque des "1" ou des "2" dans les données. Cette version ne détermine pas si le premier identifiant est "1", car votre question ne le mentionne pas.
La meilleure solution est d'utiliser lag()
et lead()
. Cependant, SQL Server 2008 ne prend pas en charge ces fonctions. Alors, abordons cela comme un fossé et des îles. Existe-t-il des situations avec plus de 1 "1" ou "2" d'affilée pour un id
donné ? Le code suivant devrait trouver ces anomalies :
select id, inoutid, count(*) as num_in_row,
from (select t.*,
row_umber() over (partition by id, inoutid order by date, hours, minute) as seqnum_ii,
row_umber() over (partition by id order by date, hours, minute) as seqnum_i
from t
) t
group by id, inoutid, (seqnum_i - seqnum_ii)
having count(*) > 1