1

一連の条件を指定して、テーブルの最後から2番目の行を更新する必要があります。クエリの場合、次の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

しかし、一連の条件を前提として、最後から2番目の行を更新する方法がわかりません。

最後から2番目の行を更新するための正しいクエリは何ですか?

4

1 に答える 1

2

MySQLは、 UPDATEまたはDELETE操作の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>
于 2012-07-16T18:52:21.567 に答える