我有一个表,其中包含一个名为logDateTime列和一个外键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

10-04 10:34