我有一个表,用于存储与正在执行的任务相关的事件和时间戳。 “报告”任务是“测试”的集合,每个测试都有自己的一组事件和相关的时间戳。
结构如下:
reportID
testID
eventDateTime
eventType
每个eventType类似于“开始”,“暂停”,“完成”等。我要做的是编写一个查询,告诉我对给定的reportID / testID组合采取的最后一个操作及其时间戳。
我的初步质询是:
SELECT reportID, MAX(eventDateTime), eventType
FROM testtracker_event
GROUP BY reportID, testID
结果非常接近我想要的,我得到最新的eventDateTime(我想要的),但是它返回第一个eventType(而不是与最新时间戳相关联的eventType。)
我意识到类似的问题,但我搜索过并且搜索过,这似乎比我发现的类似问题简单得多。我想相信这是可能的,没有子查询或加入,但我得到的想法基于类似问题的答案与更复杂的逻辑,但它不是。
答案 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)组合的最新时间戳,并将其用作外部查询中的比较。
希望这有效。