1

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

结构如下:

reportID
testID
eventDateTime
eventType

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

我的初步查询是:

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

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

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

4

1 回答 1

0

问题是,由于“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)组合的最新时间戳,并将其用作外部查询中的比较。

希望这有效。

于 2013-09-27T19:09:17.100 回答