首页 > 解决方案 > 与特定行上mysql中其他列的列更新

问题描述

id  craeted_date         updated_date
121 1556192726251       1556773299198
35  1556192726254       1556781196570
325 1556192726253       1556781296607
365 1556192726256       1556781346627
398 1556192726258       1556781496675

我想选择像下面这样的表格表 craeted_date 的第二行由 updated_date 的第一行更新, craeted_date 的第三行由 updated_date 的第二行更新,如下所示

id  craeted_date         updated_date
121 1556192726251       1556773299198
35  1556773299198       1556781196570
325 1556781196570       1556781296607
365 1556781296607       1556781346627
398 1556781346627       1556781496675

我正在使用以下查询其更新所有列更新 user_tbl 设置 craeted_date=updated_date 但我需要修改 craeted_date 第二行

标签: mysql

解决方案


如果您使用的是 MySQL 8+,那么我们可以利用LAG分析功能:

UPDATE yourTable
SET craeted_date = LAG(updated_date, 1, craeted_date) OVER (ORDER BY craeted_date);

在早期版本的 MySQL 上,以下更新连接可能有效:

UPDATE yourTable t1
INNER JOIN
(
    SELECT craeted_date, updated_date
    FROM (
        SELECT t1.craeted_date,
            COALESCE((SELECT t2.updated_date
             FROM yourTable t2
             WHERE t2.craeted_date < t1.craeted_date
             ORDER BY t2.craeted_date DESC
             LIMIT 1), t1.craeted_date) updated_date
         FROM yourTable t1
    ) t
) t2
    ON t1.craeted_date = t2.craeted_date
SET t1.craeted_date = t2.updated_date;

推荐阅读