我想使用IN(1,2,3)
对历史表中的一组Ids执行更新。当然,表格中有相同的ID的条目不止一个。对于每个ID,更新只应在最后一个历史记录条目中执行。单个更新一组ID的最后一行条目 - MySQL
有没有一种方法来执行此单一更新?
UPDATE table SET fk_something = 123 WHERE id_something IN (1,2,3) AND ...?
在此先感谢。
我想使用IN(1,2,3)
对历史表中的一组Ids执行更新。当然,表格中有相同的ID的条目不止一个。对于每个ID,更新只应在最后一个历史记录条目中执行。单个更新一组ID的最后一行条目 - MySQL
有没有一种方法来执行此单一更新?
UPDATE table SET fk_something = 123 WHERE id_something IN (1,2,3) AND ...?
在此先感谢。
如果你有一个列,以确定最后的日期是什么,那么你可以使用一个子查询类似这样的UPDATE
:
update yourtable t1
inner join
(
select max(updated_at) MaxDate, id_something
from yourtable
group by id_something
) t2
on t1.id_something = t2.id_something
and t1.updated_at = t2.MaxDate
set t1.fk_something = 123
where t1.id_something IN (1,2,3)
这使用子查询来获得max(updated_at)
每个id_something
的值。这些行随后会连接到您的表格以确保您更新最新的行。
是:
UPDATE yourtable
SET fk_something = 123
WHERE id_something=1
ORDER BY datecreated DESC
LIMIT 0,1
;
UPDATE yourtable
SET fk_something = 123
WHERE id_something=2
ORDER BY datecreated DESC
LIMIT 0,1
;
...
只是包装它在简化的过程。 (注意,如果您通过CSV列表作为参数,则需要使用准备/执行)
您怎么知道最后一项是什么?你有最后一个日期字段或其他指标吗? – Taryn 2013-03-01 12:16:18
是的。我有一个updated_at datetime字段。 – 2013-03-01 12:29:05