这个问题在这里已经有答案了:
sql仅选择列上具有最大值的行[重复](27个答案)
两年前关门了。
我的数据有点像上面。我想根据作业id、运行id、开始小时、结束小时的每组,记住具有最大日志id的最新条目。
我试图使用下面的查询,但不幸的是,它返回的是组中的最小日志id记录,而不是最大日志id记录。
请帮忙
select * from
(select * from job_monitor_log order by job_id,log_id)t1
group by job_id,run_id,start_hour,end_hour having max(log_id);
注意-查询应该按照mysql
预期产量如下-
1条答案
按热度按时间u5i3ibmn1#
一种规范的方法是连接到一个子查询,该子查询查找最新的
log_id
定义的每个组的值:如果您可以使用mysql 8+或更高版本,那么您可以在这里使用分析函数:
如果每组有两个或多个记录,关于最大
log_id
值,则可以替换ROW_NUMBER
与RANK
或者DENSE_RANK
包括所有这些关系。为了涵盖所有的基础,我们还可以使用相关子查询方法,这与您最初尝试的方法相同:
这将包括最大
log_id
每组的值。但是,这可能是给出的三个查询中性能最低的方法。但有时,在使用orm框架之类的东西时,我们可能需要像上面所示的那样表达查询。