sql >> Base de Datos >  >> RDS >> Sqlserver

vaya a la siguiente fila cuando una columna contenga cierto valor (servidor sql 2008)

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