在没有子查询的MySQL中优先使用ORDER BY而不是GROUP BY

Mah*_*dsi 6 mysql sql group-by subquery sql-order-by

我有以下查询,它做了我想要的,但我怀疑没有子查询可以这样做:

  SELECT * 
    FROM (SELECT * 
            FROM 'versions' 
        ORDER BY 'ID' DESC) AS X 
GROUP BY 'program'
Run Code Online (Sandbox Code Playgroud)

我需要的是按程序分组,但返回具有最高值"ID"的版本中的对象的结果.

在我过去的经验中,像这样的查询应该在MySQL中工作,但由于某种原因,它不是:

  SELECT * 
    FROM 'versions' 
GROUP BY 'program' 
ORDER BY MAX('ID') DESC
Run Code Online (Sandbox Code Playgroud)

想要做的是让MySQL首先执行ORDER BY 然后再执行GROUP BY,但它坚持首先执行GR​​OUP BY,然后执行ORDER BY.即它正在对分组的结果进行排序,而不是对排序的结果进行分组.

当然不可能写

SELECT * FROM 'versions' ORDER BY 'ID' DESC GROUP BY 'program'

谢谢.

Ric*_*iwi 2

只要 (program,id) 上有复合索引,这应该可以做到并且工作得很好。子查询应该只检查每个程序分支的第一个 id,并从外部查询中快速检索所需的记录。

select v.*
from
(
    select program, MAX(id) id
    from versions
    group by program
) m
inner join versions v on m.program=v.program and m.id=v.id
Run Code Online (Sandbox Code Playgroud)