0

我找不到我的问题的解决方案..

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

  • ID
  • group_id
  • 旗帜

目前,该flag列设置为 0。

我想更新此表并将flag1 仅设置为 1分组时具有最大(最新)的行。idgroup_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
4

2 回答 2

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

在此处查看小提琴。

于 2013-06-28T13:42:05.840 回答
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 )
于 2013-06-28T13:49:57.123 回答