gpt4 book ai didi

mysql - 如何查询具有唯一标识符的行及其各自的最大值?

转载 作者:行者123 更新时间:2023-11-29 12:02:37 24 4
gpt4 key购买 nike

假设我有表 exection_records 其中包含数据:

+----+----------+---------------------+
| id | handle | finishedAt |
+----+----------+---------------------+
| 1 | task_foo | 2015-08-16 03:10:33 |
| 2 | task_foo | 2015-08-15 04:00:27 |
| 3 | task_foo | 2015-08-14 02:10:25 |
| 4 | task_bar | 2015-08-17 03:00:25 |
| 5 | task_bar | 2015-08-16 02:01:25 |
| 6 | task_bar | 2015-08-13 06:02:50 |
+----+----------+---------------------+

现在我想获取每个唯一句柄的 finishedAt at 的最新时间戳的行,即:

+----+----------+---------------------+
| id | handle | finishedAt |
+----+----------+---------------------+
| 1 | task_foo | 2015-08-16 03:01:33 |
| 4 | task_bar | 2015-08-17 03:00:25 |
+----+----------+---------------------+

我知道有MAX在 MySQL 中。

我可以通过以下方式获取每个任务的最新记录:

SELECT *,MAX(finishedAt) FROM db.execution_records where taskHandle = 'task_foo';
SELECT *,MAX(finishedAt) FROM db.execution_records where taskHandle = 'task_bar';

但是我不想发出多个查询,而是发出一个查询,并且我不想命名句柄。

我怎样才能实现我的查询?

最佳答案

在 MySQL 中,最简单的方法是使用一个子查询来查找每个句柄的最后完成时间,然后将这些结果连接回表中以选出整行。

SELECT
execution_records.*
FROM
(
SELECT
handle, MAX(finished_at) AS max_finished_at
FROM
execution_records
GROUP BY
handle
)
AS summary
INNER JOIN
execution_records
ON execution_records.handle = summary.handle
AND execution_records.finished_at = summary.max_finished_at

您仍然可以使用简单的 WHERE 子句将其过滤到特定句柄(而不是所有句柄)。

WHERE
summary.handle IN ('task_foo','task_bah')

然后,优化器将使用类似宏的扩展将该 where 子句推送到聚合查询以及外部查询中。

关于mysql - 如何查询具有唯一标识符的行及其各自的最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32120336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com