仅更新带有条件的max(id)的行

时间:2013-06-28 13:40:38

标签: mysql sql-update

我无法找到解决问题的方法..

假设我们有一个这样的简单表:

  • ID
  • GROUP_ID
  • 标志

目前,flag列设置为0。

我希望更新此表,并仅在flag分组时,将id设置为仅包含最大(最新)group_id的行。

我一直在测试很多东西,没有成功。

示例:

id: 1, group_id: 1, flag: 0
id: 2, group_id: 1, flag: 0
id: 3, group_id: 1, flag: 0
id: 4, group_id: 2, flag: 0
id: 5, group_id: 2, flag: 0

将成为:

id: 1, group_id: 1, flag: 0
id: 2, group_id: 1, flag: 0
id: 3, group_id: 1, flag: 1
id: 4, group_id: 2, flag: 0
id: 5, group_id: 2, flag: 1

2 个答案:

答案 0 :(得分:1)

UPDATE
  yourtable t1 INNER JOIN (SELECT group_id, MAX(ID) mx_id
                           FROM yourtable
                           GROUP BY group_id) t2
  ON t1.group_id = t2.group_id AND t1.id = t2.mx_id
SET
  t1.flag = 1

请参阅小提琴here

答案 1 :(得分:0)

作为参考,这是该问题的TSQL(SQL Server)解决方案。

UPDATE tablename
SET flag = 1
FROM (
   SELECT max(id) As maxid FROM tablename GROUP BY group_id
) A
WHERE 
  id = A.maxid

甚至

UPDATE tablename
SET flag = 1 
WHERE id IN ( SELECT max(id) FROM tablename GROUP BY group_id )