我有一个表,其中包含一个名为log
的DateTime
列和一个外键TimeOfLog
。
我想做的是每个Logger_ID
获取最新条目。
SELECT l.TimeOfLog AS TimeOfLog, l.Logger_ID AS Logger_ID
FROM `log` `l`
GROUP BY l.Logger_ID
HAVING MAX(l.TimeOfLog)
不过,这或多或少会返回一个属于该
Logger_ID
的随机TimeOfLog
。如果我跑了SELECT MAX(l.TimeOfLog) AS TimeOfLog, l.Logger_ID AS Logger_ID
FROM `log` `l`
GROUP BY l.Logger_ID
我得到了预期的最新结果。但是,我很确定
Logger_ID
不是属于那个Logger_ID
的。为什么我在这里有误会?
最佳答案
要获得最大行,不要认为group by
;想过滤。有一种方法:
select l.*
from log l
where l.timeoflog = (select max(t2.timeoflog)
from log l2
where l2.logger_id = l.logger_id
);
如果你只需要最大的时间,那么聚合是合适的:
select logger_id, max(timeoflog)
from log l
group by logger_id;
你有这样的表达:
HAVING MAX(l.TimeOfLog)
这只是检查最大值不是
0
还是NULL
。