表
创建了张测试的表user
需求
查询IP是127.0.0.1,用户角色role为‘user’和‘tmp’中status最大的记录所在整行记录。
解决方法
我的查询为先取出所要的最大值,作为条件再去查询一遍。
SELECT
a.*
FROM
USER a,
(SELECT
role,
MAX(STATUS) STATUS
FROM
USER
WHERE role IN ('user', 'tmp')
AND regIp = '127.0.0.1'
GROUP BY role) b
WHERE a.STATUS = b.STATUS
AND a.role = b.role
AND a.regIp = '127.0.0.1' ;
这样可以得出想要的结果,但感觉有点繁琐。
网上有排序查询的方法,先根据status排序,再根据role排序,下边结果中取所需角色role或者在排序中先取都可以。
SELECT
*
FROM
(SELECT
*
FROM
USER
ORDER BY STATUS DESC
LIMIT 10000) AS a
GROUP BY role ;
结果:
但上述方法中排序后要加limit才能是排序生效,当你结果记录超过limit值后,结果就会出问题了。
SELECT
*
FROM
(SELECT
*
FROM
USER
ORDER BY STATUS DESC
LIMIT 3) AS a
GROUP BY role ;
结果:
这个结果是有问题的,对于数据库中的数据,是不能把limit设置大一点来解决的。
希望能有更好的解决方法,谢谢。