Mysql 8 中无法用低版本的 二次子查询实现,把数据集升序排列后,再外层做group By分组,取出第一条的方式。
因此引入了一个新函数,自动生成行序列,并且行序列按照指定字段分组后再根据自定字段进行排列原理如下
goupbyfield为分组字段,sortfield为组内需排序的字段
ROW_NUMBER() OVER(PARTITION BY goupbyfield ORDER BY sortfield ASC) rn
最后外层取rn=1的记录,就是最终分组好的结果值
sql
SELECT t1.*
FROM (
SELECT *, ROW_NUMBER() OVER(PARTITION BY groupbyfield ORDER BY sortfield DESC) rn
FROM your_table
) t1
WHERE t1.rn = 1;