给出一个非常简单的表列选择行,但只有最新的时间戳
Name, Action, Status, Timepoint
1 "A" "Open" "OK" "2012-09-04 10:10:00"
2 "A" "Close" "OK" "2012-09-04 10:05:00"
3 "A" "Close" "ERROR" "2012-09-04 10:02:00"
4 "B" "Look" "NICE" "2012-09-04 10:05:00"
5 "B" "Blow" "COLD" "2012-09-04 10:00:00"
6 "C" "Laugh" "OK" "2012-09-04 10:02:00"
7 "C" "Laugh" "MUTE" "2012-09-04 10:00:00"
如何最有效地选择每一行的名称和行动但组合只有动作最新时间点? 在上面的例子中,它将返回行
1, 2, 4, 5, 6
工作落实获取行和使用子查询只返回,如果有0行与同名称,行动的新组合时间点。但是,当数据集变大时,这似乎效率很低。这件事情是这样
SELECT Name, Action, Status, Timepoint
FROM foobar
WHERE Name IN (... Names of interest ...) AND
Status IN (... statuses of interest ...) AND
(SELECT COUNT(*) FROM foobar AS t2 WHERE t2.Name = Name AND t2.Status = Status AND t2.Timepoint > Timepoint) = 0
order by Name, Timepoint
像魅力一样工作 – inquam