如何更新倒数第二行


How can I update the second-to-last row?

在给定一组条件的情况下,我需要更新表中倒数第二行。如果它是一个SELECT查询,它看起来像这样:

SELECT col_1 FROM table_1 WHERE id = id_# ORDER BY timestamp_col DESC LIMIT  1,1

然而,当我做以下事情时,我会遇到一个错误,但这是我想要的行为:

UPDATE table_1 SET col_1 = value_# ORDER BY timestamp_col DESC LIMIT 1,1

我知道我可以写这个

UPDATE table_1 SET col_1 = value_# ORDER BY timestamp_col DESC LIMIT 1

但在给定条件的情况下,我不知道如何更新倒数第二行。

更新倒数第二行的正确查询是什么?

MySQL不支持UPDATEDELETE操作的LIMIT子句中的"偏移量"功能。

但是对于SELECT语句是受支持的。

因此,您可以做的是将偏移LIMIT选择包裹在连接的子选择中,然后只更新idtimestamp_col等于连接的idtimestamp_col的行,如下所示:

UPDATE table_1 a
INNER JOIN
(
    SELECT id, timestamp_col
    FROM table_1
    WHERE id = <id>
    ORDER BY timestamp_col DESC
    LIMIT 1,1
) b ON a.id = b.id AND a.timestamp_col = b.timestamp_col
SET a.col_1 = <value>