2012-05-02 3 views
0

Mysqlデータベースに履歴データテーブルがあります。Mysqlの更新/挿入:履歴データのコピー

別の日の1日の履歴データを同じ表で繰り返したいとします。いくつかのサンプルデータと

表構造、:

Id | Date  | Value 

    1 | 2012-04-30 |  5 
    2 | 2012-04-30 | 10 
    3 | 2012-04-30 | 15 

私はこれらのID &値を繰り返したいが、新しい日付の - 例えば2012-05-01すなわち追加:

1 | 2012-05-01 |  5 
    2 | 2012-05-01 | 10 
    3 | 2012-05-01 | 15 

私はこれを行うための簡単な方法が存在すべきであることを感じて...私は、サブクエリでのUPDATE文で遊んで、複数のLEFT JOINのを使用して試してみたが、まだそこまでしていません。

どうすればいいですか?

編集:明確にする... - これらを新しいテーブルに追加したくありません。 - テーブルの既存のレコードを変更しません。 - idsは意図的に複製されています(データが参照するものを記録する別のテーブルのforeign_keyです)。

答えて

1
INSERT INTO yourTable 
SELECT ID, "2012-05-01" As Date, Value 
FROM yourTable 
WHERE Date = "2012-04-31" 

通常、あなたのIDは自動インクリメントになるため、同じテーブルに同じIDを持つことはできません。別のIDまたは別のテーブルを使用してください。

異なるID(次の自動インクリメント):

INSERT INTO yourTable 
SELECT NULL as ID, "2012-05-01" As Date, Value 
FROM yourTable 
WHERE Date = "2012-04-31" 

別のテーブル(元IDを参照)

INSERT INTO yourTable_hist 
SELECT NULL as ID, ID as old_ID, "2012-05-01" As Date, Value 
FROM yourTable 
WHERE Date = "2012-04-31" 
+0

あなたの最初の回答はありがたいです。 – amaidment

+0

あなたは大歓迎です。 MySQLの 'INSERT ... SELECT'と' CREATE TABLE ... SELECT'はよく知られていませんが、便利な機能です:] – Konerak

0

たぶん、このような何か:

UPDATE Table1 
SET Date=DATE_ADD(Date, INTERVAL 1 DAY) 

それともしたい場合それらを新しいテーブルに挿入してください:

INSERT INTO Table1 
SELECT 
    ID, 
    DATE_ADD(Date, INTERVAL 1 DAY), 
    Value 
FROM 
    Table2 
関連する問題