GROUP BY
查询默认是去每个分组第一条
很多时候我们需要获取每个分组的最后一条,例如查当前用户于其他用户的聊天记录的最后一条。
原始sql:
SELECT * FROM table GROUP BY type ORDER BY createdAt DESC
这里的ORDER BY
是不生效的,因为GROUP BY
的执行会先于 ORDER BY
于是我们可以先排序后再来GROUP BY
:
SELECT * FROM (
SELECT * FROM table ORDER BY createdAt DESC
) as result
GROUP BY result.type
大功告成!但是在某些mysql版本group by虽然不是拿了第一条,但也不是最后一条,奇了怪了。排查下,排序的查询是没问题,GROUP BY
后就出问题了。
后来百度以一段时间啊,好像有些兼容性,排序查询的时间要加上LIMIT
就可以了
完整的正确写法:
SELECT * FROM (
SELECT * FROM table ORDER BY createdAt DESC LIMIT 9999
) as result
GROUP BY result.type
Nices!