mysql - 在 mySQL 中,如何为多个表中的每个客户端 ID 选择最新的时间戳?

标签 mysql sql select

我的数据库中有各种表,每个表对应于一种特定类型的消息。各种客户端会定期将消息保存到数据库中,但根据发生的情况,它们可能会将一条或多条消息保存到一个或多个表中。有4张 table 。
每个表的格式如下:

client_id | time_stamp | var1 | var2 | var3 | ...

其中 client_idVARCHAR 字段,time_stamp 是格式为 YYYY 的 SQL TIMESTAMP -MM-DD 时:分:秒。每个表的 var 都不同。

还有一个客户表,其中包含有关客户的详细信息,如下所示:

id | name | type | etc....

消息表上的client_id 对应于客户端表上的idid 也是客户端表的主键。

我想查询数据库以查找所有表中每个客户端的最新时间戳。因此,在我的结果中,我应该获得 client_id 和上次联系服务器的 time_stamp 列表,如下所示:

id | time_stamp
1  |  12/2/15...
2  |  11/2/15...
...etc  

我以为我可以通过连接来做到这一点,但现在我明白事实并非如此。我的 join 语句为每个表中的每个 time_stamp 提供了一个 client_id 和一列;此外,结果是,它只为已将至少一条消息保存到所有表的客户端返回一行。
所以我在这里显然偏离了目标。 谁能帮我吗?

我的错误SQL语句如下:

SELECT clients.id
     , msg_type_1.time_stamp
     , msg_type_2.time_stamp
     , msg_type_3.time_stamp
     , msg_type_4.time_stamp 
  FROM devices 
  JOIN msg_type_1 
    ON msg_type_1.client_id = clients.id 
  JOIN msg_type_2 
    ON msg_type_2.client_id = clients.id 
  JOIN msg_type_3 
    ON msg_type_3.client_id = clients.id 
  JOIN msg_type_4 
    ON msg_type_4.client_id = clients.id 
 GROUP 
    BY id

最佳答案

select client_id, max(time_stamp)
from 
  (select client_id, max(time_stamp) as time_stamp
  from table 1
  group by client_id
  union
  select client_id, max(time_stamp) as time_stamp
  from table 2
  group by client_id
  union
  select client_id, max(time_stamp) as time_stamp
  from table 3
  group by client_id
  union
  select client_id, max(time_stamp) as time_stamp
  from table 4
 group by client_id)
group by client_id

关于mysql - 在 mySQL 中,如何为多个表中的每个客户端 ID 选择最新的时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28561581/

相关文章:

mysql -/var/lib/memsql中没有memsql.sock文件

mysql - 两个主键和自动递增

python - 尝试在 Python/Django 中清理非常基本的 MySQL SELECT

php - 这个复杂的SQL语句怎么写

sql - 按没有特定值的列分组

MYSQL - 返回产品选项变体

php - 使用PHP/MySQL可视化显示数据库信息

mysql - 具有内连接查询的唯一结果集

mysql - 如何从其他列(带有触发器)中创建计算列?

mysql - 将简单的 postgreSQL 函数转换为 Mysql