Another approach, without joining:
select
original_value,
case when @original = original_value then
@group_number
else
@group_number := @group_number + 1
end,
(@original := original_value) as x
from tbl,(select @original := null, @group_number := 0) z
order by original_value
Live test: http://www.sqlfiddle.com/#!2/b82d6/6
If you want to delete the calculations as a result, execute the query table:
select w.original_value, w.group_number
from
(
select
original_value,
case when @original = original_value then
@group_number
else
@group_number := @group_number + 1
end as group_number,
(@original := original_value) as x
from tbl,(select @original := null, @group_number := 0) z
order by original_value
) w
Live test: http://www.sqlfiddle.com/#!2/b82d6/4
source
share