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

时间:2013-09-27 18:53:59

标签: mysql group-by timestamp

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

结构如下:

reportID
testID
eventDateTime
eventType

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

我的初步质询是:

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

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

我意识到类似的问题,但我搜索过并且搜索过,这似乎比我发现的类似问题简单得多。我想相信这是可能的,没有子查询或加入,但我得到的想法基于类似问题的答案与更复杂的逻辑,但它不是。

1 个答案:

答案 0 :(得分: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)组合的最新时间戳,并将其用作外部查询中的比较。

希望这有效。