C'è un modo relativamente efficiente per determinare se i dati sono corretti -- beh, quasi. Determina se mancano "1" o "2" nei dati. Questa versione non determina se il primo ID è "1", perché la tua domanda non lo menziona.
La soluzione migliore è usare lag()
e lead()
. Tuttavia, SQL Server 2008 non supporta queste funzioni. Quindi, affrontiamo questo come un gap-and-islands. Ci sono situazioni con più di 1 "1" o "2" di fila per un dato id
? Il codice seguente dovrebbe trovare queste anomalie:
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