单个更新一组ID的最后一行条目 - MySQL

时间:2013-03-01 12:11:30

标签: mysql sql-update

我想使用IN(1,2,3)对历史记录表中的一组ID执行更新。当然,表中的同一个id有多个条目。对于每个id,更新应仅在最后一个历史记录条目中执行。

有没有办法通过一次更新来执行此操作?

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

提前致谢。

2 个答案:

答案 0 :(得分: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)的{​​{1}}值。然后将这些行连接到您的表,以确保您更新最新的行。

答案 1 :(得分: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列表作为参数传递,则需要使用prepare / execute)