Я думаю, вы могли бы использовать запрос, подобный этому:
SELECT T1.id, T1.year, COUNT(T2.id) AS new_id
FROM `table` T1
JOIN `table` T2 ON T1.id > T2.id AND T1.year = T2.year
GROUP BY T1.id, T1.year
ORDER BY T1.year, new_id
Просто измените запрос на ОБНОВЛЕНИЕ.Однако это может занять некоторое время, в зависимости от размера таблицы.
РЕДАКТИРОВАТЬ - Запрос на обновление:
CREATE TABLE temp_table (
id INT NOT NULL,
new_id NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO temp_table
SELECT T1.id, COUNT(T2.id) AS new_id
FROM `table` T1
JOIN `table` T2 ON T1.id > T2.id AND T1.year = T2.year
GROUP BY T1.id, T1.year
ORDER BY T1.year, new_id;
UPDATE `table` t
SET t.new_id = (SELECT tmp.new_id FROM temp_table tmp WHERE tmp.id = t.id)
WHERE t.new_id IS NULL;
DROP TABLE temp_table;
Не проверено, но должно быть достаточно близкоЗамените table
именем таблицы и именами столбцов id
, new_id
и year.