sql:将新列插入表中

时间:2016-05-14 10:46:22

标签: mysql sql sql-server

我在管理表中添加了一个新列。我想在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 = /'

2 个答案:

答案 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;

如果您认为@rnNULL值开头,则可以执行以下操作:

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;