2013-06-28 53 views
0

我找不到我的問題的解決方案..更新只排,MAX(ID)與條件

比方說,我們有一個簡單的表是這樣的:

  • ID
  • GROUP_ID
  • 標誌

對於時刻,flag列被設置爲0。

我想更新此表,並設置flag 1只爲有最大(最新)idgroup_id分組的行。

我一直在測試很多東西,沒有成功。

例子:

id: 1, group_id: 1, flag: 0 
id: 2, group_id: 1, flag: 0 
id: 3, group_id: 1, flag: 0 
id: 4, group_id: 2, flag: 0 
id: 5, group_id: 2, flag: 0 

將變爲:

id: 1, group_id: 1, flag: 0 
id: 2, group_id: 1, flag: 0 
id: 3, group_id: 1, flag: 1 
id: 4, group_id: 2, flag: 0 
id: 5, group_id: 2, flag: 1 

回答

1
UPDATE 
    yourtable t1 INNER JOIN (SELECT group_id, MAX(ID) mx_id 
          FROM yourtable 
          GROUP BY group_id) t2 
    ON t1.group_id = t2.group_id AND t1.id = t2.mx_id 
SET 
    t1.flag = 1 

請參閱小提琴here

0

作爲參考,這是針對該問題的TSQL(SQL Server)解決方案。

UPDATE tablename 
SET flag = 1 
FROM (
    SELECT max(id) As maxid FROM tablename GROUP BY group_id 
) A 
WHERE 
    id = A.maxid 

甚至

UPDATE tablename 
SET flag = 1 
WHERE id IN (SELECT max(id) FROM tablename GROUP BY group_id) 
+0

對不起..你扔查詢語法錯誤。你有沒有嘗試或只是猜測? –

+0

這是TSQL,而不是mySQL語法。對不起。可能還沒有看到mysql標籤,或者當我回答這個問題時它不存在。我在我的答案中加了一個警告。 – Regenschein