Helaas heeft MySQL geen vensterfuncties en dat heb je nodig. Je zult dus zoiets als dit moeten gebruiken:
Laatste zoekopdracht
select data, group_row_number, overall_row_num
from
(
select data,
@num := if(@data = `data`, @num + 1, 1) as group_row_number,
@data := `data` as dummy, overall_row_num
from
(
select data, @rn:[email protected]+1 overall_row_num
from yourtable, (SELECT @rn:=0) r
) x
order by data, overall_row_num
) x
order by overall_row_num
Uitleg:
Ten eerste, inner select, dit past een nep row_number
toe naar alle records in uw tabel (zie SQL Fiddle met demo
):
select data, @rn:[email protected]+1 overall_row_num
from yourtable, (SELECT @rn:=0) r
Tweede deel van de query, vergelijkt elke rij in uw tabel met de volgende om te zien of deze dezelfde waarde heeft, zo niet, dan start het group_row_number
over (zie SQL Fiddle met demo
):
select data,
@num := if(@data = `data`, @num + 1, 1) as group_row_number,
@data := `data` as dummy, overall_row_num
from
(
select data, @rn:[email protected]+1 overall_row_num
from yourtable, (SELECT @rn:=0) r
) x
order by data, overall_row_num
De laatste selectie, retourneert de gewenste waarden en plaatst ze terug in de door u gevraagde volgorde:
select data, group_row_number, overall_row_num
from
(
select data,
@num := if(@data = `data`, @num + 1, 1) as group_row_number,
@data := `data` as dummy, overall_row_num
from
(
select data, @rn:[email protected]+1 overall_row_num
from yourtable, (SELECT @rn:=0) r
) x
order by data, overall_row_num
) x
order by overall_row_num