【问题标题】:Mysql Update / Insert: copying historical dataMysql Update/Insert:复制历史数据
【发布时间】:2012-05-02 09:22:40
【问题描述】:

我的 Mysql 数据库中有一些历史数据表。

我想在同一张表中重复一天的历史数据。

表结构,带有一些示例数据:

 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,但还没有实现。

关于如何做到这一点的任何想法?

编辑:澄清... - 我不想将这些添加到新表中 - 我也不想更改表中的现有记录。 - id 是故意重复的(它们是另一个表的外键,用于记录数据所指的内容......)。

【问题讨论】:

    标签: mysql sql-update insert-select sql-insert


    【解决方案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"
    

    【讨论】:

    • 不客气。 MySQL 的INSERT ... SELECTCREATE TABLE ... SELECT 通常是未知的,但很有用的特性:]
    【解决方案2】:

    可能是这样的:

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

    或者如果您想将它们插入到新表中:

    INSERT INTO Table1
    SELECT
      ID,
      DATE_ADD(Date, INTERVAL 1 DAY),
      Value
    FROM
      Table2
    

    【讨论】:

      猜你喜欢
      • 2015-01-11
      • 2013-07-12
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 2015-07-30
      相关资源
      最近更新 更多