2014-04-01 36 views
0

我有這樣的MySQL表...如何獲取用戶的上次插入值?

+----+---------+-----------+---------------+------------+---------------------+ 
| id | user | val1  | val2   | val3  | last_modified_date | 
+----+---------+-----------+---------------+------------+---------------------+ 
| 1 | 0001 |   1 |    1 |   1 | 2014-03-31 16:53:29 | 
| 2 | 0100 |   1 |    1 |   1 | 2014-04-01 10:32:50 | 
| 3 | 0200 |   1 |    0 |   0 | 2014-04-01 10:34:13 | 
| 4 | 0200 |   1 |    1 |   1 | 2014-04-01 14:43:47 | 
+----+---------+-----------+---------------+------------+---------------------+ 

我試圖做到的,是讓所有的過去(按時間順序)設置爲用戶創造的價值的。

在給出的例子中,我們爲用戶0200插入0,但在4小時後插入1.我希望能夠獲得插入的最後一個值(1)。

我有這個疑問:

select * 
from table 
where val3 = 1 
group by user 
order by last_modified_date desc; 

以及更通用的一個

select * from table group by user order by last_modified_date desc; 

這些查詢似乎爲示例表工作正常。他們是否正確的每一個案件?我怎樣才能告訴「選擇所有val3 = 1作爲最後插入值的用戶」?

回答

1

您可以使用這兩種方法之一:

選項1 - 獲取每個用戶和過濾器t.val3的最後一條記錄:

SELECT t.* 
FROM table t 
JOIN (
    SELECT MAX(last_modified_date) as last_modified, user 
    FROM table 
    GROUP BY user 
) as tt ON t.user = tt.user AND t.last_modified_date = tt.last_modified_date 
GROUP BY user 
HAVING val3 = 1 

選項2 - 獲得t.val3 = 1的所有記錄並刪除那些不是最後的記錄:

SELECT t.* 
FROM table t 
LEFT JOIN table tt ON tt.user = t.user AND tt.last_modified_date > t.last_modified_date 
WHERE t.val3 = 1 
AND tt.id IS NULL 
+0

我做了第一個變體!謝謝! – Napolux

1

試試這個

select * from table as t1 
where val3 = 1 
and last_modified_date = 
(select max(last_modified_date) as last_modified_date from table as t2 
where t1.user=t2.user and t2.val3 = 1); 
+0

如果2個用戶具有相同的'last_modified_date',但它不是其中一個用戶的最後一個記錄? – Vatev

+0

我也用val3 = 1條件 – Madhivanan

+0

我的錯誤,我錯過了't1.user = t2.user'。 – Vatev

相關問題