2015-12-11 137 views
2

列更新標誌想象一下如下表:於最大日期每組

Id  type  created      flag 
----------------------------------------------------- 
1   1  2015-12-11 12:00:00   0 
2   1  2015-12-11 12:10:00   0 
3   2  2015-12-11 12:00:00   0 
4   2  2015-12-11 12:10:00   0 
5   3  2015-12-11 12:00:00   0 
6   3  2015-12-11 12:10:00   0 
-------------------------------------------------------- 

我想寫這將標誌設置爲1(TRUE)的每一行的查詢與最近的創建日期爲每種類型分組。當然,結果應該是:

Id  type  created      flag 
----------------------------------------------------- 
1   1  2015-12-11 12:00:00   0 
2   1  2015-12-11 12:10:00   1 
3   2  2015-12-11 12:00:00   0 
4   2  2015-12-11 12:10:00   1 
5   3  2015-12-11 12:00:00   0 
6   3  2015-12-11 12:10:00   1 
-------------------------------------------------------- 

我知道

UPDATE table 
SET flag = TRUE 
ORDER BY created DESC 
LIMIT 1; 

將設置標誌最近的日期,但我堅持就如何應用此爲每個組。

我也試過:

UPDATE table t 
INNER JOIN 
    (SELECT id, flag, MAX(created) as maxdate 
    FROM table 
    GROUP BY type) as m 
SET flag = TRUE 
WHERE m.id = t.id AND t.created = m.maxdate; 
+0

的可能的複製[SQL:查找每個組最高紀錄](http://stackoverflow.com/questions/2657482/sql-find-the-max-record-per-group) – Strawberry

+0

你的編輯嘗試出了什麼問題?哦,你已經略微混淆了子查詢,我會在SET之前使用ON子句,而不是在它之後的WHERE子句。 – Strawberry

回答

0

也許嘗試這樣的事:

UPDATE table SET flag = 1 
WHERE id IN(SELECT id FROM(SELECT id, type FROM table 
ORDER BY created DESC) AS t GROUP BY type t.type); 
+0

但爲什麼要麻煩? – Strawberry

+0

@Strawberry告訴我你的wersio,我願意給你一個加號:) –

+0

這是接近但不完全,它仍然更新錯誤的記錄...可能是因爲它先按日期排序,組合不一定有最大值創建日期 – ryan