我在管理表中添加了一个新列。我想在effective_date列中填充修订列。
ALTER TABLE home.prod ADD revision int;
版本号将以100开头并递增1.修订版将基于effective_date。因此,最老的eff_date将获得100,然后下一个最老的将获得101,依此类推。
Eff date 1/1/2012 – Revision 100
Eff date 1/1/2013 – Revision 101
Eff date 7/1/2014 – Revision 102
Eff date 1/1/2015 – Revision 103
类似这样的陈述 -
revision =100
UPDATE prod.admin
SET revision= revision+ 1
WHERE eff_date = /'
答案 0 :(得分:1)
在MySQL中你可以做到
UPDATE prod.admin
CROSS JOIN (select @rev := 99) r
SET revision = (@rev := @rev + 1)
ORDER BY eff_date asc
答案 1 :(得分:0)
不幸的是,MySQL不允许JOIN
查询UPDATE
ORDER BY
。一种方法是:
SELECT @rn := 99;
UPDATE prod.admin
SET revision = (@rn := @rn + 1)
ORDER BY eff_date ASC;
如果您认为@rn
以NULL
值开头,则可以执行以下操作:
UPDATE prod.admin
SET revision = (@rn := COALESCE(@rn, 100), @rn + 1)
ORDER BY eff_date ASC;
在SQL Server中,您可以这样做:
WITH toupdate as (
SELECT a.*, ROW_NUMBER() OVER (ORDER BY eff_date) as seqnum
FROM prod.admin
)
update toupdate
SET revision = seqnum;