Is there a way in SQL to sequentially add a row number by key group?
Assume a table with arbitrary (CODE,NAME) tuples. Example table:
MySQL doesn't AFAIK. This covers most bases..
SELECT
CODE,
ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY NAME) - 1 As C_NO,
NAME
FROM
MyTable
MySQL (and probably most other databases):
select g.CODE
, count(*)-1 as C_NO
, g.NAME
from MyTable as g
left join MyTable as o
on g.CODE = o.CODE
and g.NAME >= o.NAME
group by g.CODE
, g.NAME;
Specific to MySQL:
DELIMITER $$
CREATE PROCEDURE NumberRowsByGroup()
BEGIN
SET @code := 0;
SET @num := 0;
SELECT CODE, C_NO, NAME FROM
( select q.CODE
, q.NAME
, @num := IF(q.CODE = @code, @num + 1, 0) as C_NO
, @code := q.CODE as previous
from yourTable q
order by CODE
, NAME
) as p
;
END$$
DELIMITER ;
Then, we can call:
CALL NumberRowsByGroup();
According to xaprb.com/blog post: how-to-number-rows-in-mysql, the second is faster.