sql >> Databasteknik >  >> RDS >> Sqlserver

Räkna på varandra följande dubbletter i SQL

Jag kommer att anta att id är unik och ökar. Du kan få antal på varandra följande värden genom att använda olika radnummer. Följande räknar alla sekvenser:

select grp, value, min(id), max(id), count(*) as cnt
from (select t.*,
             (row_number() over (order by id) - row_number() over (partition by value order by id)
             ) as grp
      from table t
     ) t
group by grp, value;

Om du vill ha den längsta sekvensen av 0:or:

select top 1 grp, value, min(id), max(id), count(*) as cnt
from (select t.*,
             (row_number() over (order by id) - row_number() over (partition by value order by id)
             ) as grp
      from table t
     ) t
group by grp, value
having value = 0
order by count(*) desc


  1. Enkel Slony-I replikeringsinställning.

  2. Django:Använder anpassade rå SQL-inlägg med executemany och MySQL

  3. Få första veckodagen i MySql med vecka nr

  4. skapa databas med pdo i php