在 mySQL 中,我如何 select 跨多个表的每个 client_id 最近的 time_stamp?
In mySQL, how can I select the most recent time_stamp for each client_id across multiple tables?
我的数据库中有各种 table,每个 table 对应一种特定类型的消息。各种客户端会定期将消息保存到数据库中,但根据发生的情况,它们可能会将一条或多条消息保存到一个或多个 table 中。有4个table。
每个 table 的格式如下:
client_id | time_stamp | var1 | var2 | var3 | ...
其中 client_id
是 VARCHAR
字段,time_stamp
是格式 YYYY-MM-DD hh:mm:ss
中的 SQL TIMESTAMP
。每个 table 的 var
是不同的。
还有一个客户 table,详细信息如下:
id | name | type | etc....
消息 table 上的 client_id
对应于客户端 table 上的 id
。 id
也是客户端的主键 table.
我想查询数据库以查找所有 table 中每个客户的最新 time_stamp。所以在我的结果中,我应该得到 client_id
和 time_stamp
最后一次联系服务器的列表,如下所示:
id | time_stamp
1 | 12/2/15...
2 | 11/2/15...
...etc
我以为我可以通过连接来做到这一点,但现在我明白了,事实并非如此。我的加入语句给了我一个 client_id
和每个 table 中每个 time_stamp
的列;此外,结果,它只为已将至少一条消息保存到所有 table 的客户端返回一行。
所以我显然离题了。
谁能帮我吗?
我的错误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
我的数据库中有各种 table,每个 table 对应一种特定类型的消息。各种客户端会定期将消息保存到数据库中,但根据发生的情况,它们可能会将一条或多条消息保存到一个或多个 table 中。有4个table。
每个 table 的格式如下:
client_id | time_stamp | var1 | var2 | var3 | ...
其中 client_id
是 VARCHAR
字段,time_stamp
是格式 YYYY-MM-DD hh:mm:ss
中的 SQL TIMESTAMP
。每个 table 的 var
是不同的。
还有一个客户 table,详细信息如下:
id | name | type | etc....
消息 table 上的 client_id
对应于客户端 table 上的 id
。 id
也是客户端的主键 table.
我想查询数据库以查找所有 table 中每个客户的最新 time_stamp。所以在我的结果中,我应该得到 client_id
和 time_stamp
最后一次联系服务器的列表,如下所示:
id | time_stamp
1 | 12/2/15...
2 | 11/2/15...
...etc
我以为我可以通过连接来做到这一点,但现在我明白了,事实并非如此。我的加入语句给了我一个 client_id
和每个 table 中每个 time_stamp
的列;此外,结果,它只为已将至少一条消息保存到所有 table 的客户端返回一行。
所以我显然离题了。
谁能帮我吗?
我的错误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