Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

vai alla riga successiva quando una colonna contiene un determinato valore (sql server 2008)

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