【发布时间】:2020-01-07 08:48:56
【问题描述】:
TLDR:从其他表中获取最新行以及主表中的所有条目。 但是我还没有找到解决办法...
无论我尝试了什么,都没有真正解决它。 我的最后一个解决方案确实有效,直到时间戳不同会发生什么,所以它没有列出所有这些。
基本上我们有一个主表:
Servers: ID, userID, Name, updated (timestamp)
和资源表:
cpu: ID, serverID, Load, updated (timestamp)
memory: ID, serverID,Usage, updated (timestamp)
我目前的版本,遗憾的是不能完全工作。
SELECT servers.name,servers.ID,servers.updated,cpu.Load,memory.Usage
FROM servers
LEFT JOIN cpu ON cpu.serverID = servers.ID
LEFT JOIN memory ON memory.serverID = servers.ID
AND cpu.updated = (SELECT cpu.updated FROM cpu ORDER BY cpu.updated DESC LIMIT 1)
AND memory.updated = (SELECT memory.updated FROM memory ORDER BY memory.updated DESC LIMIT 1)
在时间戳不同之前确实有效也提供了多个结果,但我可以通过 GROUP BY servers.ID 轻松解决该问题。
没有子选择,我只有最旧的结果,但我的目标是获得最新的。
我的预期输出是:
Name, ID, Updated, Load, Usage
Server , 1, 00030303, 2.5, 40
Server2, 2, 03365345, 12.5, 80
你们中有人有想法吗?如果您仍需要更多信息,请询问。 谢谢
【问题讨论】:
-
您使用的是哪个 MySQL 版本?
-
@jarlh 10.3.17-MariaDB
-
能否请您以表格格式提供您的预期输出
-
@fa06 我更新了帖子,请看一下。
-
您使用的 MariaDB 版本支持 window functions。您可以使用ROW_NUMBER() 做您需要的事情。
标签: sql mariadb greatest-n-per-group