【问题标题】:how to update a field according to first entry of a user?如何根据用户的第一个条目更新字段?
【发布时间】:2017-08-10 15:44:50
【问题描述】:

我有一个表名 devices。

+---------+---------------+---------------------+
| 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 日期。我想更新 user_id 1 created_at 日期 2017-03-10 10:39:41 的 device_status。

编辑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-03-10 10:39:41)。 我要更新

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

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

也有记录。

【问题讨论】:

  • 你试过使用 min(created_at) 吗?您面临什么问题?
  • 问题是如何查看user_id?
  • 你想每次都做批量更新还是单行更新?
  • 发布你试过的SQL
  • @RealCheeseLord 等我编辑帖子。

标签: mysql sql-update


【解决方案1】:

如果你所有的日期都是互斥的,你可以按 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);

【讨论】:

    【解决方案2】:

    在带有 where 子句的子查询中使用 min() 函数。

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

    希望它能解决你的问题。

    【讨论】:

      猜你喜欢
      • 2017-11-16
      • 1970-01-01
      • 2016-08-30
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      相关资源
      最近更新 更多