简体   繁体   English

如何在SQL中更新每个组的最大行

[英]how to update max row per group in SQL

I just added the 'default' column to my DB. 我刚刚在数据库中添加了“默认”列。 I am trying to set the default value to '1' based on the latest 'addDate' per accountId. 我正在尝试根据每个accountId的最新“ addDate”将默认值设置为“ 1”。

+----+-----------+--------------------+--------+
| id | accountId |      addDate       | default|
+----+-----------+--------------------+--------+
| 1  | 45        |2012-02-29 08:41:59 |        |
| 2  | 55        |2012-03-29 08:41:59 |        |
| 3  | 45        |2012-04-29 08:41:59 |        |
| 4  | 55        |2012-05-29 08:41:59 |        |
| 5  | 60        |2012-05-29 08:41:59 |        |
+----+-----------+--------------------+--------+

I found I was able to isolate the proper rows by using => 我发现我可以通过使用=>隔离正确的行

select * from tble1 
where addDate = (select max(addDate) from tble1 as sl where sl.accountId = tble1.accountId);

I need to be able to run an UPDATE that sets 'default' column to '1' only 1 time per 'accountId' basing it off of latest 'addDate'. 我需要能够运行一个UPDATE,将每个'accountId'的'default'列设置为'1'仅1次,并将其基于最新的'addDate'。

try this 尝试这个

 UPdate Table1 
 SET `default` = 1 
 where addDate in (select * from (
                               select max(addDate) from table1 as sl group by accountId)t
                                 )

DEMO HERE 此处演示

UPDATE table1 x
  LEFT
  JOIN table1 y
    ON y.accountid = x.accountid
   AND y.adddate > x.adddate
   SET x.default = 1
 WHERE y.id IS NULL;

or (faster) 或(更快)

UPDATE table1 x
 JOIN 
    ( SELECT accountid  
           , MAX(addDate) max_adddate 
        FROM table1 
       GROUP 
          BY accountid
    ) y
   ON y.accountId = x.accountId
  AND y.max_adddate = x.adddate
  SET x.default = 1;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM