MySQL 子查询中的order by 不生效记录
我们知道group by 会保留第一条数据,当数据库中同一个字段值对应多条不同数据时,加入我们需要取最小的创建时间,可以先写一个子查询,通过时间正序,然后再 group by 即可得到分组中最小创建时间的数据。
但是在 MySQL5.7版本中,子查询的order by
会被优化,然后你实际取得的数据并不是你排序后想要的数据。
网上很多的说法是 在子查询中加入 limit,使 order by 不被单独使用,就可以达到想要的效果
。但实际上,这样也是不行的。
像下面的查询,实际上是达不到想要的效果的,取得的数据也不是排序后的数据。
SELECT
tRecord.business_no
FROM
( SELECT business_no, call_time FROM call_record WHERE business_type = 1 ORDER BY call_time DESC LIMIT 20000 ) tRecord
GROUP BY
tRecord.business_no
实际发现加了limit 仍然未生效。
正确应该是,在 group by的时候同时使用 order by,即可生效,如下:
SELECT
tRecord.business_no
FROM
( SELECT business_no, call_time FROM call_record WHERE business_type = 1 ORDER BY call_time DESC LIMIT 20000 ) tRecord
GROUP BY
tRecord.business_no
ORDER BY
tRecord.call_time DESC
网友评论