Hay una forma relativamente eficiente de determinar si los datos son correctos, bueno, casi. Determinará si faltan "1" o "2" en los datos. Esta versión no determina si la primera identificación es "1", porque su pregunta no menciona eso.
La mejor solución es usar lag()
y lead()
. Sin embargo, SQL Server 2008 no admite estas funciones. Entonces, abordemos esto como una brecha e islas. ¿Hay alguna situación con más de 1 "1" o "2" seguidos para un id
dado? ? El siguiente código debería encontrar estas anomalías:
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