mysql - 与特定行上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 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;
推荐阅读
- python - 如何使用 OpenCV 读取 IP 摄像机
- c# - 对象不包含 'Where' ASP.NET MVC 的定义
- mysql - 在 JOIN 的情况下,GROUP BY 列仅出现在一个表中(使用两个表)
- python - 附加到 LD_LIBRARY_PATH 会破坏 python
- firebase - 使用 firebase(推送)通知响应本机
- mqtt - 多个物联网设备之间的 MQTT 通信设计
- android - gradle 设置:com.google.android.gms.internal.zzbgl 未找到
- r - 如何删除 R 中空间多边形数据框中的因子水平?
- android - 使用 ordeBy() 和 endBefore() 时,Firestore 降序分页返回 0 个结果
- sql-server - ISNULL 与 CONVERT