Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL Fortlaufende Datensätze mit Anzahl

Dazu können Sie Variablen verwenden.

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

Diese Abfrage verwendet 4 Variablen

1) @cur_outcome, das anfänglich auf eine leere Zeichenfolge gesetzt ist. Danach weist die Auswahl das system_outcome der aktuellen Zeile zu.

2) @prev_outcome, das anfänglich auf eine leere Zeichenfolge gesetzt ist. Danach setzt die Auswahl es auf das @cur_outcome (das zum ersten Mal ein leerer String ist und so weiter).

3) @cur_pnum, das anfänglich auf eine leere Zeichenfolge gesetzt ist. Danach weist die Auswahl die Telefonnummer der aktuellen Zeile zu.

4) @prev_pnum, das anfänglich auf eine leere Zeichenfolge gesetzt ist. Danach setzt die Auswahl ihn auf den Wert @cur_pnum (was anfangs eine leere Zeichenfolge ist).

order by Klausel ist hier wichtig, um die aktuellen und vorherigen Zeilen basierend auf phone_number und date zu bezeichnen.

Führen Sie zunächst die innere Abfrage aus, um zu sehen, wie die Variablen gesetzt sind, was die Dinge für Sie klären würde.

Sample Demo

Die Demo enthält einige Beispieldaten mehr als in der Frage gezeigt.