Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 每个组具有最大日期的列的更新标志_Mysql - Fatal编程技术网

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
之后缺少表名,但这是有效的。非常感谢你。