━━━━━━━━━ 关于 GROUP BY 的排序问题

zhiin1 2007-08-03 11:02:18
select * from t group by username order by logtime desc

MySQL对上述语句的处理方式是: 先群组,群组后再排序
但是我现在想排序后再群组该如何解决呢?


---------
ps.用如下方式可以解决, 但是感觉效率太低, 不知道还有没有更好的办法!
谢谢大家!

select * from (select * from t order by logtime desc) t2 group by username
...全文
319 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cymple 2007-08-16
  • 打赏
  • 举报
回复
LS有位兄弟已经说了
max....
合理使用聚集函数
总哈哈 2007-08-15
  • 打赏
  • 举报
回复
LEFT JOIN 速度是要好些,关注..,不知道两种有什么区别,感觉都差不多的吧?
hunshihaichong 2007-08-15
  • 打赏
  • 举报
回复
select * from t as A
left join
select username,max(logtime) as newest from t as B
on A.username=B.username and A.logtime=B.max(logtime) group by username
hunshihaichong 2007-08-15
  • 打赏
  • 举报
回复
select * from t as A
left join
select username,max(logtime) as newest from t as B
where A.username=B.username and A.logtime=B.max(logtime) group by username
wildlily980 2007-08-15
  • 打赏
  • 举报
回复
这个问题见你问几天了.
兄弟,你都是星星了.好像不见你有查google啊.
这是我查询的结果.
select max(log_time),user_name from table_name group by user_name order by max(log_time);
好用的话,别忘了给分.
zhiin1 2007-08-15
  • 打赏
  • 举报
回复
感谢helloyou0(你好!)

请问以上语句如何用left join改写呢?
helloyou0 2007-08-05
  • 打赏
  • 举报
回复
楼主是想让结果是各组里login时间最近的一个

但是实际上在sql里,用了group by, 再用*是不合理的,

有些数据库是不允许写 select * from table order by xxx 这样的语句的.

楼主需要的结果可以这样写

select * from t
where (username,logtime) in
( select username,max(logtime) as newest from t group by username )

可以把in用left join 改写, 速度上好一点






gxd305 2007-08-05
  • 打赏
  • 举报
回复
似乎这样的语句一般不用* 吧,

说说你的需求吧,想要什么样的结果?
xiaolei1982 2007-08-05
  • 打赏
  • 举报
回复
就楼主想要达到的要求来说就只有那样写了,个人感觉没有必要非要先排序再分组,前者足以实现要求
zhiin1 2007-08-04
  • 打赏
  • 举报
回复
TO tianyaxiao()
---------
貌似一样, 但是差别很大
tianyaxiao 2007-08-03
  • 打赏
  • 举报
回复
先群组再按登录时间排序
先按登录时间排序再群组
貌似结果都一样?

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧