給出一個非常簡單的表列選擇行,但只有最新的時間戳
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