需求是:
将最大的time对应的相同name全部置顶。
比方说最大的time是5,对应的name是ccc。就将所有name为ccc的排序在最前面。
然后第二个aaa的time为4,就将所有name为aaa的排在ccc的后面。
(select * from (
select * from
(user as u , (SELECT id,name, max(time) FROM user) mx)
WHERE u.id = mx.id
ORDER BY
u.time DESC) table1 )
UNION
(select * from
(SELECT * FROM
user as u
ORDER BY
u.time DESC) table2 )
楼主只完成了置顶ccc。剩余的就按时间倒序排序了。aaa那个怎么也想不出来咋做。求大神解答!!
1.优先按name列排序,然后是time列
2.name需要先把排序的顺序进行计算
try this
select * from user order by find_in_set(name,
(select group_concat(name order by time desc) from
(select name,max(time) as time from user group by name) as tt),time desc;
select * from user where group by name order by time DESC
不行哎。这样ccc就只显示一条了。
select * from user group by name,time order by time DESC
mysql> select distinct t.* from ( select c2.* from users c1 left join users c2
on c1.name = c2.name order by c1.time desc ,c2.time desc ) t ;
SELECT
你想实现这种现实其实不需要分组,思想方向错了,其实单纯的order by就可以实现。
select * from user order by name desc,time desc;
按每个name最大的time排序
SELECT * ,(SELECT MAX(time) FROM user a WHERE a.name=t.NAME) AS mm
FROM user t
ORDER BY mm desc,t.time DESC
id name time mm
5 ccc 5 5
3 ccc 3 5
4 aaa 4 4
1 aaa 1 4
2 bbb 2 2
应该是你要的效果吧。不要分组。
先用‘ROWCOUNT函数’查询出name的顺序作为表B
再用原来的表联查表B,用NAME对应,再根据表B的id进行排序就OK了
select a.*,b.id as bid from table a
left join
(select distinct name,rowcout as id from table order by time desc )b
on a.name = b.name
order by bid
希望对你有帮助