2013-03-01 43 views
1

我想使用IN(1,2,3)对历史表中的一组Ids执行更新。当然,表格中有相同的ID的条目不止一个。对于每个ID,更新只应在最后一个历史记录条目中执行。单个更新一组ID的最后一行条目 - MySQL

有没有一种方法来执行此单一更新?

UPDATE table SET fk_something = 123 WHERE id_something IN (1,2,3) AND ...? 

在此先感谢。

+0

您怎么知道最后一项是什么?你有最后一个日期字段或其他指标吗? – Taryn 2013-03-01 12:16:18

+0

是的。我有一个updated_at datetime字段。 – 2013-03-01 12:29:05

回答

0

如果你有一个列,以确定最后的日期是什么,那么你可以使用一个子查询类似这样的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) 

SQL Fiddle with Demo

这使用子查询来获得max(updated_at)每个id_something的值。这些行随后会连接到您的表格以确保您更新最新的行。

0

是:

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列表作为参数,则需要使用准备/执行)

相关问题