Anda dapat menggunakan variabel untuk melakukan ini.
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
Kueri ini menggunakan 4 variabel
1) @cur_outcome yang awalnya disetel ke string kosong. Setelah itu pilih menetapkan system_outcome baris saat ini.
2) @prev_outcome yang awalnya disetel ke string kosong. Setelah itu pilih menyetelnya ke @cur_outcome (yang merupakan string kosong untuk pertama kalinya dan seterusnya).
3) @cur_pnum yang awalnya disetel ke string kosong. Setelah itu pilih menetapkan nomor telepon baris saat ini.
4) @prev_pnum yang awalnya disetel ke string kosong. Setelah itu, pilih menyetelnya ke nilai @cur_pnum (yang awalnya merupakan string kosong).
order by
klausa penting di sini untuk menunjuk baris saat ini dan sebelumnya berdasarkan nomor telepon dan tanggal.
Jalankan kueri dalam terlebih dahulu untuk melihat bagaimana variabel disetel, yang akan memperjelas banyak hal untuk Anda.
Demo berisi beberapa data sampel lebih dari yang ditunjukkan dalam pertanyaan.