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'
我需要的是按程序分组,但返回具有最高值"ID"的版本中的对象的结果.
在我过去的经验中,像这样的查询应该在MySQL中工作,但由于某种原因,它不是:
  SELECT * 
    FROM 'versions' 
GROUP BY 'program' 
ORDER BY MAX('ID') DESC
我想要做的是让MySQL首先执行ORDER BY 然后再执行GROUP BY,但它坚持首先执行GROUP BY,然后执行ORDER BY.即它正在对分组的结果进行排序,而不是对排序的结果进行分组.
当然不可能写
SELECT * FROM 'versions' ORDER BY 'ID' DESC GROUP BY 'program'
谢谢.
只要 (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
| 归档时间: | 
 | 
| 查看次数: | 13471 次 | 
| 最近记录: |