sql >> Databasteknik >  >> RDS >> Mysql

SQL Konsekutiva poster med antal

Du kan använda variabler för att göra detta.

select phone_number from (
select c.*,
@prev_outcome:[email protected]_outcome,
@cur_outcome:=system_outcome,
@prev_pnum:[email protected]_pnum,
@cur_pnum:=phone_number,
case when @cur_pnum = @prev_pnum and @prev_outcome <> @cur_outcome then @rn:[email protected]+1
     when @cur_pnum = @prev_pnum and @prev_outcome = @cur_outcome then @rn:[email protected]
else @rn:=1 end as rank
from calls c, 
(select @rn:=0,@prev_pnum:='',@cur_pnum:='',@prev_outcome:='',@cur_outcome:='') r
order by phone_number,dt
    ) x
where system_outcome='No Answer'
group by phone_number,rank
having count(*) > 6

Den här frågan använder 4 variabler

1) @cur_outcome som initialt är satt till en tom sträng. Därefter tilldelar markeringen den aktuella radens system_outcome.

2) @prev_outcome som initialt är satt till en tom sträng. Därefter ställer select den till @cur_outcome (som är en tom sträng för första gången och så vidare).

3) @cur_pnum som initialt är satt till en tom sträng. Därefter tilldelar select den aktuella radens telefonnummer.

4) @prev_pnum som initialt är satt till en tom sträng. Därefter ställer select den till @cur_pnum värde (vilket är en tom sträng initialt).

order by sats är viktig här för att ange nuvarande och tidigare rader baserat på telefonnummer och datum.

Kör den inre frågan först för att se hur variablerna är inställda, vilket skulle förtydliga saker för dig.

Sample Demo

Demon innehåller några exempeldata mer än vad som visades i frågan.



  1. Fråga efter MySQL:s INFORMATIONSSCHEMA:Varför? På vilket sätt?

  2. Vad är skillnaden mellan ett Oracle- och ett Microsoft-schema?

  3. Använder grupp efter på två fält och räkna i SQL

  4. Generera en uppsättning eller sekvens utan loopar – del 3