Mysql 使用上一行的值更新列

标签 mysql

我在 MySQL 中有一个表,例如:

SELECT time_stamp, price,prev_price, FROM prices ORDER by time_stamp ASC;

-------------------------------
time_stamp | price | prev_price
-------------------------------
1382457241 |  23.3 | NULL
1393553097 |  14.2 | NULL
1412857868 |  16.0 | NULL
1412857965 | 201.1 | NULL
........

我想要一个 UPDATE 语句用前一行的价格值更新 prev_price(按时间戳排序):

-------------------------------
time_stamp | price | prev_price
-------------------------------
1382457241 |  23.3 | NULL
1393553097 |  14.2 | 23.3
1412857868 |  16.0 | 14.2
1412857965 | 201.1 | 16.0
........

MySQL 版本:5.7.24:

mysql> select version();
+-------------------------+
| version()               |
+-------------------------+
| 5.7.24-0ubuntu0.16.04.1 |
+-------------------------+

最佳答案

试试这个:

SELECT time_stamp,
       price,
       (SELECT e2.price
        FROM example e2
        WHERE e2.time_stamp < e1.time_stamp
        ORDER BY e2.time_stamp DESC
        LIMIT 1
       ) AS prev_price
FROM example e1
ORDER BY e1.time_stamp ASC

关于Mysql 使用上一行的值更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53670734/

相关文章:

mysql - GROUP BY mySQL 语句

mysql - 计算 MySQL 中列的简单中位数

php - WordPress - 更新数据库 - $wpdb->prepare

mysql - 是否可以基于 MySQL 中某一列的选择进行插入?

mysql 查询需要 13 分钟才能运行

MySQL选择其他表中没有匹配列的行

sql - 如何在 MySQL 中执行 FULL OUTER JOIN?

mysql - 在 MySQL 中附加类似 JSON 的字符串

php - ajax方法发布不起作用

php - unicode和丹麦语之间的utf8排序规则区别