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); 

希望它能解决您的问题。

相关问题