在特定行上使用mysql中的其他列更新列

时间:2019-05-03 10:36:30

标签: mysql

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

我要选择如下表格 craeted_date的第二行由update_date的第一行更新 craeted_date的第三行由update_date的第二行更新 像这样

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

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

1 个答案:

答案 0 :(得分:2)

如果您使用的是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;