sql:在表格中插入新列

问题描述:

我在管理表中添加了一个新列。我希望将修订列填入effective_date列。sql:在表格中插入新列

 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

哪[标签:rdbms]你在用吗? MySQL或SQL Server? – Mureinik

在MySQL中,你可以做

UPDATE prod.admin 
CROSS JOIN (select @rev := 99) r 
SET revision = (@rev := @rev + 1) 
ORDER BY eff_date asc 

不幸的是,MySQL不允许JOINUPDATE查询与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;