2013-03-01 64 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列表作爲參數,則需要使用準備/執行)

相關問題