我想找到列的第2,第3 ......最大值
考虑以下Employee表,其中包含一列薪水.
+------+ | Sal | +------+ | 3500 | | 2500 | | 2500 | | 5500 | | 7500 | +------+
以下查询将返回第N个最大元素.
select SAL from EMPLOYEE E1 where (N - 1) = (select count(distinct(SAL)) from EMPLOYEE E2 where E2.SAL > E1.SAL )
例如.当需要第二个最大值时,
select SAL from EMPLOYEE E1 where (2 - 1) = (select count(distinct(SAL)) from EMPLOYEE E2 where E2.SAL > E1.SAL )
+------+ | Sal | +------+ | 5500 | +------+
您可以将列排序为降序格式,然后从第n行获取值.
编辑::
根据评论请求更新.警告完全未经测试!
SELECT DOB FROM (SELECT DOB FROM USERS ORDER BY DOB DESC) WHERE ROWID = 6
像上面这样的东西应该适用于Oracle ......你可能必须首先获得正确的语法!
您没有在MySQL上指定哪个数据库可以执行
SELECT column FROM table ORDER BY column DESC LIMIT 7,10;
将跳过前7,然后让你下一个十高.
同样,您可能需要修复数据库,但如果您希望数据集中的前2位值可能具有重复值,那么您还需要执行一个组:
SELECT column FROM table WHERE column IS NOT NULL GROUP BY column ORDER BY column DESC LIMIT 5 OFFSET 2;
将跳过前两个,然后将获得下一个五个最高.
纯SQL(请注意:我建议您使用DBMS特有的SQL功能,因为它可能会更有效)。这将使您获得第n + 1个最大值(要获得最小值,请翻转<)。如果重复,则将其设置为COUNT(DISTINCT VALUE)。
select id from table order by id desc limit 4 ; +------+ | id | +------+ | 2211 | | 2210 | | 2209 | | 2208 | +------+ SELECT yourvalue FROM yourtable t1 WHERE EXISTS( SELECT COUNT(*) FROM yourtable t2 WHERE t1.id <> t2.id AND t1.yourvalue < t2.yourvalue HAVING COUNT(*) = 3 ) +------+ | id | +------+ | 2208 | +------+