我无法找到解决问题的方法..
假设我们有一个这样的简单表:
目前,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
答案 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 )