我的表中通常有“ id”,但我还需要一个“ code”,类似于id,但特定于年份。这意味着它将以某种方式自动增加,但是每新的一年将以1开始。
当我插入新行时,我只是使用
SELECT MAX(code) WHERE YEAR(time) = YEAR(CURRENT_DATE)
然后加一
但是我的项目已经在运行,我想进行一个查询,该查询将为已经存在的行设置这些代码。
所以现在我的桌子看起来像这样->
文字2011'NULL'||文字2011'NULL'||文字2011'NULL'||文字2012
'NULL'||文字2012'NULL'
我需要将其更改为
文字2011 1 ||文字2011 2 ||文字2011 3 ||文字2012 1 ||文字2012
2
有任何想法吗?
最佳答案
我认为您可以使用这样的查询:
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.
关于mysql - 我自己的自动增量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9567243/