我需要更改包含日期和金额的SQL表的日期列,例如20170101
到20170102
。但是,新日期20170102
可能已经存在。这会导致重复键错误,因为日期列是唯一索引的一部分。
我的第一个想法是使用INSERT ON DUPLICATE KEY:
INSERT INTO table (Date, Amount)
SELECT '20170102', Amount
FROM table
WHERE Date = '20170101'
ON DUPLICATE KEY UPDATE Amount = OldAmount + NewAmount
部分Amount = OldAmount + NewAmount
显然不能正常工作。但是我该如何解决我的问题?
答案 0 :(得分:0)
这是你的答案:假设旧表TABLE1(DATE1 DATE PRIMARY KEY,AMOUNT INT);
将新列Date2添加为DATE:
ALTER TABLE TABLE1 ADD COLUMN DATE2 DATE;
按旧日期生成所有DATE2;
UPDATE TABLE1设置DATE2 = DATE1; - 旧栏DATE1或DATE
更新DATE2哪个记录要更新DATE
UPDATE TABLE1 SET DATE2 ='20170101'其中DATE1 ='20170102'; - 假设20170101已经存在
获取金额增加的记录
SELECT DATE2,TABLE1组的sum(AMOUNT)乘以1; - 这将显示所有带和的记录
您可以创建新表TABLE2并插入这些记录:
CREATE TABLE TABLE2(DATE1 DATE PRIMARY KEY,AMOUNT int); INSERT INTO TABLE2 SELECT DATE2,SUM(AMOUNT)FROM TABEL1 GROUP BY 1;
答案 1 :(得分:0)
If you're using SQL server, try a merge statement.
Just to clarify - Do you need to change the dates of records in the table or just add new records?
//