Mysql
 sql >> Database >  >> RDS >> Mysql

Record SQL consecutivi con conteggio

Puoi usare le variabili per farlo.

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

Questa query utilizza 4 variabili

1) @cur_outcome inizialmente impostato su una stringa vuota. Successivamente il select assegna il system_outcome della riga corrente.

2) @prev_outcome inizialmente impostato su una stringa vuota. Successivamente il select lo imposta su @cur_outcome (che è una stringa vuota per la prima volta e così via).

3) @cur_pnum che inizialmente è impostato su una stringa vuota. Successivamente il select assegna il numero di telefono della riga corrente.

4) @prev_pnum che inizialmente è impostato su una stringa vuota. Successivamente select lo imposta sul valore @cur_pnum (che inizialmente è una stringa vuota).

order by La clausola è importante qui per designare la riga corrente e quella precedente in base a numero_telefono e data.

Esegui inizialmente la query interna per vedere come sono impostate le variabili, il che chiarirebbe le cose per te.

Sample Demo

La demo contiene alcuni dati di esempio in più rispetto a quanto mostrato nella domanda.