Mysql 使用相邻行更新表字段值

Mysql 使用相邻行更新表字段值,mysql,Mysql,首先,我不确定这在mysql限制内是否可行。无论如何,我会把它贴出来 假设我有一个带有id和date的表。但由于某种原因,表格中缺少了一些日期。所以我基本上需要的是,用邻接行日期值更新那些缺少的日期 +-----------+---------------------+ | id | date | +-----------+---------------------+ | 1000 | 2016-11-22 11:57:59 | | 1

首先,我不确定这在
mysql
限制内是否可行。无论如何,我会把它贴出来

假设我有一个带有
id
date
的表。但由于某种原因,表格中缺少了一些日期。所以我基本上需要的是,用邻接行日期值更新那些缺少的日期

+-----------+---------------------+
|     id    |       date          |
+-----------+---------------------+
|    1000   | 2016-11-22 11:57:59 |
|    1001   | NULL                |
|    1002   | 2016-11-22 12:17:41 |
|    1003   | 2016-11-22 13:09:24 |
|    1004   | 2016-11-22 22:40:31 |
|    1005   | 2016-11-22 13:59:40 |
|    1006   | NULL                |
|    1007   | NULL                |
|    1008   | 2016-11-22 15:10:29 |
|    1009   | 2016-11-22 22:40:31 |
+-----------+---------------------+
根据上面的例子,我有一些规则来更新id
1001
1006
1007
缺少的日期值,如下所示

  • 如果有任何丢失的日期,则应始终使用上面的记录进行更新。例如:
    1001
    将使用
    1000
    日期值更新,该日期值为
    2016-11-22 11:57:59
  • 记录更新必须与
    id acs
    顺序相关,这样我们就不会因为上面一行中没有值而遇到任何麻烦。因为即使它最初丢失,但在到达该行之前将更新,例如:
    1007
    1006
    最初丢失,但它将使用
    1005
    更新,然后当它到达
    1007
    时,
    1006
    已经有一个值。最后,
    1006
    1007
    都有1005日期值,即
    2016-11-22 13:59:40

  • 希望我能清楚地解释这个问题,但我仍然不确定纯
    mysql
    query是否能做到这一点

    事实上,mysql使用update和join很有可能做到这一点。但是,由于有连续的空值,因此必须多次运行查询

    UPDATE empties e1, empties e2 set e1.`date` = e2.`date` 
    WHERE e1.`date` IS NULL and e1.id = e2.id+1;
    
    注意,在这个查询中,分配给id=1007的值是id=1006的行中的值,该行恰好为空。因此,您将需要第二次迭代来修复这些空值

    备注:change将清空为您的表名