使用嵌套查询更新语句

use*_*116 28 sql

我有一张桌子:

mytable:
    id
    userID
    logDate
    lastLogDate
Run Code Online (Sandbox Code Playgroud)

对于该表中的每一行,我想将'lastLogDate'列更新为每个用户的logDate的最大值...

从概念上讲,每个用户都应该有一个lastLogDate =返回的值:

select max(logDate) from mytable group by userID
Run Code Online (Sandbox Code Playgroud)

有人可以帮我写那个更新声明吗?

DWr*_*ght 47

像这样的东西?

UPDATE mytable SET lastLogDate = t.maxDateForUser  
FROM  
(  
    SELECT userid, MAX(logDate) as maxDateForUser  
    FROM mytable  
    GROUP BY userId  
) t  
WHERE mytable.userid = t.userid
Run Code Online (Sandbox Code Playgroud)

  • @MaksimKniazev,您使用的是什么 SQL 引擎? (2认同)

Mah*_*mal 10

你可以这样做:

UPDATE t
SET t.logDate = t2.LatestDate
FROM YourTable t
INNER JOIN
(
    SELECT userID, MAX(LogDate) LatestDate
    FROM YourTable
    GROUP BY userID
) t2 ON t.userID = t2.userID; 
Run Code Online (Sandbox Code Playgroud)


Alf*_*Alf 5

我不知道我是否理解正确.否则会更具体,但从我得到的,你应该做的事情:

UPDATE `mytable`
SET lastLogDate = (SELECT statement goes here)
WHERE ...
Run Code Online (Sandbox Code Playgroud)

  • 是的,这是我设想的基本结构,棘手的部分是你没有填写的东西:) (4认同)