2016-05-14 36 views
0

私は管理テーブルに新しい列を追加しました。有効な日付の列に対してリビジョンの列を設定します。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 

このようなものは、MySQLで

  revision =100 
      UPDATE prod.admin 
      SET revision= revision+ 1 
      WHERE eff_date = /' 
+0

どの[ tag:rdbms]あなたは使っていますか? MySQLまたはSQL Server? – Mureinik

答えて

1

を、文、あなたは残念ながら

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

を行うことができますが、MySQLはORDER BYUPDATEクエリでJOINを許可していません。一つの方法は次のとおりです。

SELECT @rn := 99; 

UPDATE prod.admin 
    SET revision = (@rn := @rn + 1) 
    ORDER BY eff_date ASC; 

あなたはNULL値と@rn開始すると、あなたがすることができると仮定することができた場合:あなたはどうしたら、SQL Serverでの

UPDATE prod.admin 
    SET revision = (@rn := COALESCE(@rn, 100), @rn + 1) 
    ORDER BY eff_date ASC; 

を:

WITH toupdate as (
     SELECT a.*, ROW_NUMBER() OVER (ORDER BY eff_date) as seqnum 
     FROM prod.admin 
    ) 
update toupdate 
    SET revision = seqnum; 
関連する問題