sql >> Databasteknik >  >> RDS >> Sqlserver

gå till nästa rad när en kolumn innehåller ett visst värde (sql server 2008)

Det finns ett relativt effektivt sätt att avgöra om uppgifterna är korrekta - ja nästan. Det kommer att avgöra om det saknas "1" eller "2" i datan. Denna version avgör inte om det första ID:t är "1", eftersom din fråga inte nämner det.

Den bästa lösningen är att använda lag() och lead() . SQL Server 2008 stöder dock inte dessa funktioner. Så låt oss närma oss detta som ett gap-och-öar. Finns det några situationer med mer än 1 "1" eller "2" i rad för ett givet id ? Följande kod bör hitta dessa anomalier:

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



  1. SQL Rekursiv CTE:Hitta objekt länkade av egenskap

  2. Laravel 5.1 - Ansluter till MySQL-databasen (MAMP)

  3. Importera med MySQL WorkBench... error ERROR 1046 (3D000)

  4. Hur får man andra kolumner med inte är i GROUP BY-satsen i en oracle select sql?