Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Registros consecutivos SQL com contagem


Você pode usar variáveis ​​para fazer isso.
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

Esta consulta usa 4 variáveis

1) @cur_outcome que é inicialmente definido como uma string vazia. Depois disso, o select atribui o system_outcome da linha atual.

2) @prev_outcome que é inicialmente definido como uma string vazia. Depois disso, o select o define como @cur_outcome (que é uma string vazia pela primeira vez e assim por diante).

3) @cur_pnum que é inicialmente definido como uma string vazia. Em seguida, o select atribui o phone_number da linha atual.

4) @prev_pnum que é inicialmente definido como uma string vazia. Depois disso, o select o define para o valor @cur_pnum (que é uma string vazia inicialmente).

order by A cláusula é importante aqui para designar as linhas atuais e anteriores com base em phone_number e date.

Execute a consulta interna inicialmente para ver como as variáveis ​​são definidas, o que esclareceria as coisas para você.

Sample Demo

A demonstração contém alguns dados de amostra a mais do que foi mostrado na pergunta.