首页 > 解决方案 > 从 MySQL 中的两个表中获取一个到多个记录的记录

问题描述

想要以从主表中的一条记录和从多关系表中的另一条记录的方式从一对多关系中检索记录。

确切的问题:带有“user_devices”的表 1 具有用户具有 user_id 映射的设备的 id。

现在来自表 2,其中包含许多用于用户设备的记录。名称是“collection_datas”。

我想从 collection_datas 表中获取最近的记录,该表的 server_time 是最新的,并且还想与主 userdevice 表进行映射。

所以最终记录应该包含 user_devices 表中的所有记录,其中 1 条记录与 collection_datas 表与该 server_time 关联

有关更多详细信息,请参见下表字段:

表 1 'user_devices': id user_id device_id

表 2 'collection_datas' id device_id server_time

预期的结果应该有记录

server_time > Ymd H:i:s (ex: 2020-08-07 11:23:00)

我如何使用 MAX 任何建议?

Sample data of Table user_devices
id user_id device_id
1  170     1
2  170     2
3  170     3

Table 2 'collection_datas'
id device_id server_time
1  1         2020-08-07 11:23:00
2  1         2020-08-06 12:43:00
3  2         2020-08-07 12:32:00
4  2         2020-08-07 12:44:34
5  2         2020-08-07 13:43:32
6  3         2020-08-08 11:35:32
7  3         2020-08-08 12:35:32

以上是样本数据。我想从表 users_devices 中获取记录,并从表 2 中获取 1 条记录,其中包含最新的服务器时间。

我认为以上应该足够了。

标签: mysql

解决方案


每个设备的最新数据应该是

select device_id, max(server_time)
from collection_datas
group by  device_id

如果你也需要用户 ID

select c.device_id, max(c.server_time), u.user_id
from collection_datas c
INNER JOIN user_devices ON  u u.device_id = c.device_id
group by  device_id

推荐阅读