项目里面有遇到一个需求,查询一个表,先group by ,再按group 的count(*)进行倒序,取出每个group里面发表时间最新的一个纪录,之前的同事SQL是这样写的
SELECT
*
FROM
(
SELECT
*
FROM
table
WHERE
id = ?
AND status = ?
ORDER BY
created_time DESC
) AS a
GROUP BY
a.group
ORDER BY
count(*) DESC
LIMIT 10
但是呢,最后取出来的数据是乱序的,也就是说该数据在所在的group里面不是发表时间最新的,很奇怪。最后呢,我给这条语句加了一个limit,如下
SELECT
*
FROM
(
SELECT
*
FROM
table
WHERE
id = ?
AND status = ?
ORDER BY
created_time DESC
LIMIT 10000
) AS a
GROUP BY
a.group
ORDER BY
count(*) DESC
LIMIT 10
虽然说是limit 10000,但是整个表里面实际也就3000多数据,但是这样一来查出来的数据就是group里面最新的数据了。我在想mysql里面的limit是不是像java的volatile那样,具备代码优化保持变量相对位置不变的“奇效”