我想使用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