31

私はテーブルを持っています:

mytable:
    id
    userID
    logDate
    lastLogDate

そのテーブルのすべての行について、「lastLogDate」列を更新して、ユーザーごとの logDate の最大値にしたいと思います...

概念的には、各ユーザーは lastLogDate = 以下によって返される値を持つ必要があります。

select max(logDate) from mytable group by userID

誰かがそのための更新ステートメントを書くのを手伝ってくれますか?

4

6 に答える 6

58

このようなもの?

UPDATE mytable SET lastLogDate = t.maxDateForUser  
FROM  
(  
    SELECT userid, MAX(logDate) as maxDateForUser  
    FROM mytable  
    GROUP BY userId  
) t  
WHERE mytable.userid = t.userid
于 2012-12-14T15:41:24.837 に答える
11

あなたはこれを行うことができます:

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; 
于 2012-12-14T15:40:31.857 に答える
5

あなたのことを正しく理解できたかどうかわかりません。それ以外の場合はもう少し具体的にしますが、私が得たものから、次の行に沿って何かを行う必要があります

UPDATE `mytable`
SET lastLogDate = (SELECT statement goes here)
WHERE ...
于 2012-12-14T15:38:46.070 に答える
4
UPDATE mytable mT,
  (SELECT userid,
          MAX(logDate) AS maxDateForUser
   FROM mytable
   GROUP BY userId) t
SET mT.lastLogDate = t.maxDateForUser
WHERE mT.userid = t.userid;
于 2013-10-03T13:19:39.043 に答える
3

次の更新ステートメントは、探していることを実行する必要があります

update mytable mt set  lastLogDate  = (select max(logDate) from  mytable where userID = mt.userID)
于 2012-12-14T15:51:10.403 に答える
1

このようなネストされたクエリを単純に書くことができます


    Update  mytable a 
    set 
    a.lastLogDate = (select max(logDate) from mytable b
    where a.id=b.id)
    Where...;
于 2019-04-06T13:44:56.957 に答える