2017-08-10 80 views
1

我有一個表名稱設備。如何根據用戶的第一個條目更新字段?

+---------+---------------+---------------------+ 
| user_id | device_status | created_at   | 
+---------+---------------+---------------------+ 
|  1 |    0 | 2017-03-10 10:39:41 | 
|  1 |    0 | 2017-03-14 10:19:33 | 
|  2 |    0 | 2017-03-14 10:57:59 | 
|  1 |    0 | 2017-03-15 05:58:51 | 
|  3 |    0 | 2017-03-15 06:01:32 | 
|  3 |    0 | 2017-03-15 12:10:13 | 
+---------+---------------+---------------------+ 

我想要做的是首先已經存儲在MySQL表爲user_id的更新device_status

例如我們有3行user_id 1和created_at date。我想更新user_id 1的device_status created_at日期2017-03-10 10:39:41。

編輯1:查詢我使用

UPDATE devices 
    SET device_status = 1 
WHERE created_at = (SELECT created_at 
         FROM (SELECT MIN(created_at) AS created_at 
           FROM devices) AS t); 

但這查詢只更新一條記錄(2017年3月10日10:39:41)。 我想更新

|  2 |    0 | 2017-03-14 10:57:59 | 

|  3 |    0 | 2017-03-15 06:01:32 | 

記錄了。

+2

您是否嘗試過使用分鐘(created_at)?你面臨什麼問題? – apomene

+0

問題是如何檢查user_id? –

+0

您是否想每次都進行批量更新或單行更新? –

回答

2

如果你的日期是互相排斥的你可以只通過組USER_ID:

UPDATE devices 
    SET device_status = 1 
WHERE created_at IN (SELECT created_at 
         FROM (SELECT MIN(created_at) AS created_at 
           FROM devices 
           GROUP BY user_id) AS t); 
+0

不錯,乾淨的感謝。爲我工作。 –

0

在帶有where子句的子查詢中使用min()函數。

update devices set device_status=1 where user_id = 1 and 
created_at = (select min(created_at) where user_id = 1); 

希望它能解決您的問題。

相關問題