dex*_*ter 30
考虑以下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 )
Run Code Online (Sandbox Code Playgroud)
例如.当需要第二个最大值时,
select SAL from EMPLOYEE E1 where
(2 - 1) = (select count(distinct(SAL))
from EMPLOYEE E2
where E2.SAL > E1.SAL )
Run Code Online (Sandbox Code Playgroud)
+------+ | Sal | +------+ | 5500 | +------+
TK.*_*TK. 11
您可以将列排序为降序格式,然后从第n行获取值.
编辑::
根据评论请求更新.警告完全未经测试!
SELECT DOB FROM (SELECT DOB FROM USERS ORDER BY DOB DESC) WHERE ROWID = 6
Run Code Online (Sandbox Code Playgroud)
像上面这样的东西应该适用于Oracle ......你可能必须首先获得正确的语法!
您没有在MySQL上指定哪个数据库可以执行
SELECT column FROM table ORDER BY column DESC LIMIT 7,10;
Run Code Online (Sandbox Code Playgroud)
将跳过前7,然后让你下一个十高.
小智 6
同样,您可能需要修复数据库,但如果您希望数据集中的前2位值可能具有重复值,那么您还需要执行一个组:
SELECT column
FROM table
WHERE column IS NOT NULL
GROUP BY column
ORDER BY column DESC
LIMIT 5 OFFSET 2;
Run Code Online (Sandbox Code Playgroud)
将跳过前两个,然后将获得下一个五个最高.
纯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 |
+------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89970 次 |
| 最近记录: |