Mysql:更新最新记录的字段

enc*_*nce 13 mysql sql sql-update

我正在尝试更新名称所在的最新记录John(John具有多个记录但ID不同),但我似乎处于绑定状态.我的查询有什么问题?

UPDATE messages_tbl SET is_unread=1
WHERE ReceiveTime = (SELECT MAX(ReceiveTime) FROM messages_tbl WHERE name='John')
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做这样的事情?

Aii*_*ias 41

你可以尝试使用ORDERLIMIT.

试试这个:

UPDATE messages_tbl SET is_unread = 1
WHERE name = 'John'
ORDER BY ReceiveTime DESC
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

此查询将按最高(最近)ReceiveTime到最低(最旧)的顺序更新行ReceiveTime.与之配合使用时LIMIT,只会ReceiveTime更改最新版本.


Joh*_*Woo 7

您可以加入两者并根据条件执行更新.

UPDATE  messages a
        INNER JOIN
        (
            SELECT  name , MAX(ReceiveTime) max_time
            FROM    messages 
            GROUP   BY name 
        ) b ON  a.name = b.name AND
                a.ReceiveTime = b.max_time
SET     a.is_unread = 1
-- WHERE    a.name = 'John'
Run Code Online (Sandbox Code Playgroud)

没有WHERE条件.它将全部更新is_unread最新条目的列.