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第二行
答案 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;