Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Gehe zur nächsten Zeile, wenn eine Spalte einen bestimmten Wert enthält (SQL Server 2008)

Es gibt einen relativ effizienten Weg, um festzustellen, ob die Daten korrekt sind – na ja, fast. Es wird festgestellt, ob in den Daten „1“ oder „2“ fehlen. Diese Version bestimmt nicht, ob die erste ID "1" ist, da Ihre Frage dies nicht erwähnt.

Die beste Lösung ist die Verwendung von lag() und lead() . SQL Server 2008 unterstützt diese Funktionen jedoch nicht. Betrachten wir dies also als eine Lücke und Inseln. Gibt es Situationen mit mehr als 1 "1" oder "2" hintereinander für eine bestimmte id ? Der folgende Code sollte diese Anomalien finden:

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