mysql查询问题

table:test
字段:uid,num,time
记录:
123,1,1372727555
123,1,1372727557

有没有一条语句能查出最后一条记录的时间,和这个用户一共有几条记录

SELECT time,count(*) FROM test where uid=123 order by time desc;
1372727555 ,2
这个只能查到第一条记录的时间,后面的order by失效

阅读 3.8k
2 个回答
select max(time),count(*) from test where uid=123;

@halty 正解. 我这里说说楼主的sql哪里错了吧.

SELECT time,count(*) FROM test where uid=123 order by time desc;

select里用了聚集函数count(*), 则启用了分组机制, 即所有查询结果当成一个大组来处理. 而这里select, order by里的time没有放入聚集函数中, 这在标准sql里是不允许的. 但是mysql有group by的扩展, 可以给你返回一个值, 这个值按理是不确定的, 但根据实际经验, 一般都是在数据库中 实际存储 最前的那条记录.

所以, 上述sql 在select后只有一条记录, 针对此记录做了order by.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题