0

我有这个表用于我正在制作的网络面板:

在此处输入图像描述

在特定页面上,显示了每个服务器的最新存档,这意味着它必须查看不同的服务器 ID 并按所示的降序时间戳对它们进行排序。

在此处输入图像描述

目前我必须运行SELECT DISTINCT server_id FROM archives ORDER BY time DESC,但这意味着我必须foreach在 PHP 中使用来运行额外的查询来获取存档的其余字段(id, job_id, time, sha1_sum, file_name, size)。

是否有一条 SQL 语句可以获取每个server_idtime降序排序的最新存档?在一个查询中完成所有操作会更容易和更清晰的代码。

编辑:我应该注意 web 表中的结果列表是错误的,因为当下面的存档更新时,顶部会显示 2013 年 6 月 15 日的结果。

4

2 回答 2

1

您可以组合使用GROUP BYMAX

SELECT server_id,MAX(time), id, job_id, time, sha1_sum, file_name, size FROM archives GROUP BY server_id
于 2013-06-17T05:35:51.353 回答
0

这是“组中最大”问题的另一种变体,到目前为止,SQL 新手似乎最常见的问题。

解决它的一种方法是使用相关子查询来识别在各自组中具有最长时间的所有档案。

SELECT
  a.server_id,
  a.id, a.job_id, a.time, a.sha1_sum, a.file_name, a.size
FROM 
  archives a
WHERE
  NOT EXISTS (
    SELECT 1 
    FROM archives 
    WHERE server_id = a.server_id AND time > a.time
  )
ORDER BY 
  time DESC 

如果您希望某些档案具有相同的值,则对外部查询进行索引(server_id, time)并执行 GROUP BY 。server_idtime

于 2013-06-17T06:22:06.443 回答