Mysql 每个组具有最大日期的列的更新标志
想象下表:Mysql 每个组具有最大日期的列的更新标志,mysql,Mysql,想象下表: Id type created flag ----------------------------------------------------- 1 1 2015-12-11 12:00:00 0 2 1 2015-12-11 12:10:00 0 3 2 2015-12-11 12:0
Id type created flag
-----------------------------------------------------
1 1 2015-12-11 12:00:00 0
2 1 2015-12-11 12:10:00 0
3 2 2015-12-11 12:00:00 0
4 2 2015-12-11 12:10:00 0
5 3 2015-12-11 12:00:00 0
6 3 2015-12-11 12:10:00 0
--------------------------------------------------------
我想编写一个查询,将每个类型分组的最新创建日期的每一行的标志设置为1(TRUE)。例如,结果应该是:
Id type created flag
-----------------------------------------------------
1 1 2015-12-11 12:00:00 0
2 1 2015-12-11 12:10:00 1
3 2 2015-12-11 12:00:00 0
4 2 2015-12-11 12:10:00 1
5 3 2015-12-11 12:00:00 0
6 3 2015-12-11 12:10:00 1
--------------------------------------------------------
我知道
UPDATE table
SET flag = TRUE
ORDER BY created DESC
LIMIT 1;
将为最近的日期设置标志,但我仍无法确定如何将其应用于每个组
我也试过:
UPDATE table t
INNER JOIN
(SELECT id, flag, MAX(created) as maxdate
FROM table
GROUP BY type) as m
SET flag = TRUE
WHERE m.id = t.id AND t.created = m.maxdate;
也许可以试试这样:
UPDATE table SET flag = 1
WHERE id IN(SELECT id FROM(SELECT id, type FROM table
ORDER BY created DESC) AS t GROUP BY type t.type);
可能与您的编辑尝试中的错误重复?哦,你把子查询搞糊涂了,我会在集合前使用ON子句,而不是在集合后使用WHERY子句。@草莓给我看看你的wersio,我愿意给你一个加号:)这很接近,但不完全正确,它仍在更新错误的记录。。。可能是因为它首先按日期排序,所以分组不一定有最大创建日期。它应该是
ORDER by created DESC
,并且在UPDATE
之后缺少表名,但这是有效的。非常感谢你。