gpt4 book ai didi

MySQL 最新时间戳 + 其他带分组依据的字段

转载 作者:行者123 更新时间:2023-11-30 23:13:10 26 4
gpt4 key购买 nike

我有一个表,用于存储与正在执行的任务相关的事件和时间戳。 “报告”任务是“测试”的集合,每个测试都有自己的一组事件和关联的时间戳。

结构如下:

reportID
testID
eventDateTime
eventType

每个事件类型都类似于“开始”、“暂停”、“完成”等。我想做的是编写一个查询,告诉我对给定的 reportID/testID 组合采取的最后操作及其时间戳。

我的初步查询是:

SELECT reportID, MAX(eventDateTime), eventType
FROM testtracker_event
GROUP BY reportID, testID

结果非常接近我想要的结果,我得到的是最新的 eventDateTime(我想要的),但它返回的是第一个 eventType(而不是与最新时间戳关联的 eventType。)

我意识到有人问过similar 问题,但我搜索了又搜索,这似乎比我发现的任何类似问题都简单得多。我想相信这在没有子查询或连接的情况下是可能的,但我的想法是基于对类似问题的回答,但逻辑更复杂,事实并非如此。

最佳答案

问题在于,由于“eventType”不是 GROUP BY 子句的一部分,SELECT 子句不知道要从组中选择哪个“eventType”来响应查询。因此,默认情况下它通常选择第一个。大多数其他 RDBMS 系统不允许您选择未在 GROUP BY 子句中指定的字段,而无需对其应用某些聚合函数(MAX、SUM 等)。

你可能想尝试这样的事情:

SELECT reportID, eventDateTime, eventType
FROM testtracker_event t
WHERE t.eventDateTime = (
SELECT MAX(eventDateTime) FROM testtracker_event inner_t
WHERE t.reportID = inner_t.reportID AND t.testID = inner_t.testID
GROUP BY reportID, testID
)

我使用相关子查询来获取每个(reportID、testID)组合的最新时间戳,并将其用作外部查询中的比较。

希望这能奏效。

关于MySQL 最新时间戳 + 其他带分组依据的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19058070/

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