mysql5.7不兼容5.6
SELECT * FROM (SELECT id, a_title, a_update_time, a_gid FROM articles WHERE a_gid in (4,5,6, 7) ORDER BY a_update_time DESC) a GROUP BY a_gid ORDER BY a_update_time DESC 5.6中得出的结果是正确的,是安装我想要的结果排序的
SELECT id, a_title, a_update_time, a_gid FROM articles WHERE a_gid in (4,5,6, 7) ORDER BY a_update_time DESC这个查询语句的结果
得到就是我想要的分别取a_gid中最新的一条
但是在5.7的版本中就不是这个结果了,可以自己试试
5 回复
之前我写过跟帖子中一样的语句,当时我就在想,这种用法的行为是不被sql规则所保证的,只能祈祷它的实现上刚好出来合适的结果。
select c.* from (
select a.id, a.a_title, a.a_update_time, a.a_gid, count(*) as rank
from articles a
join articles b
on a.a_gid = b.a_gid
where a.a_gid in (4, 5, 6, 7) and a.a_update_time <= b.a_update_time
group by a.id
) c
where c.rank = 1;
试试这个吧,我没有实际跑过。
@alsotang 这句的空间复杂度可能较高,表大的时候不知道效率如何。不过 mysql 没有 pg 的 window 函数,所以如果你们表大的话,还是专门写个函数来并发取每个 a_gid
的最新一条吧。