mysql子查询的一个问题

SELECT * FROM devstatus ORDER BY inserttime desc 此查询获得的是

clipboard.png

然后把这条语句作为子查询语句 按ip进行分组 代码如下
SELECT T.ip,T.memorySize,T.memoryFree,T.storageSize,T.storageFree,T.processList,T.processNumber,T.CPULoad,T.insertTime FROM (SELECT * FROM devstatus ORDER BY inserttime desc) AS T GROUP BY T.ip

获取的数据为

clipboard.png

说明一下 获取的不是最新的 这是为啥? 有大牛帮忙解决一下 万分感谢!!!

阅读 3.2k
4 个回答

5.7的吧?sql解析规则有些优化,这样写不行了
改成子查询里面加个limit 99999或者子查询取出最新time和ip然后跟原表关联查询
sql我就不写了

from 把子查询的结果作为 外边查询的条件使用,外边的查询没有order by?

这和 SQL 的执行顺序有关,GROUP BY 会比 ORDER BY 优先执行,而 GROUP BY 是正序排序的,所以第 2 张截图里 192.168.0.108 才会排在 192.168.0.1081 之前,此时内部的 ORDER BY 是不生效的。

SQL 语句可做如下修改:

SELECT  *, max(inserttime) as max_insert_time FROM devstatus
    GROUP BY(ip)
    ORDER BY max_insert_time DESC;

关于 SQL 执行顺序的问题,可以参考:SQL Select语句完整的执行顺序

不是最新的话,那是因为gruop by的原因,想要最近的话,加一个order by time asc

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