Кто-нибудь может рассказать мне, как узнать N-ю самую большую запись из таблицы в Oracle?
Как и для наибольшего, мы можем использовать MAX (имя_столбца), есть ли эффективный способ найти n-й по величине также?
Кто-нибудь может рассказать мне, как узнать N-ю самую большую запись из таблицы в Oracle?
Как и для наибольшего, мы можем использовать MAX (имя_столбца), есть ли эффективный способ найти n-й по величине также?
SELECT * FROM ( SELECT some_column, row_number() over (order by your_sort_column desc) as row_num FROM some_table ) t WHERE row_num = 3
Если вы ожидаете, что более чем одна строка имеет одинаковое значение в your_sort_column
, вы также можете использовать функцию rank()
SELECT * FROM ( SELECT some_column, rank() over (order by your_sort_column desc) as row_rank FROM some_table ) t WHERE row_rank = 3Эта волна возвращает несколько строк.
вы можете найти n-е наибольшее значение столбца, используя следующий запрос
SELECT * FROM TableName a WHERE
n = (SELECT count(DISTINCT(b.ColumnName))
FROM TableName b WHERE a.ColumnName <=b.ColumnName);
Я думаю, что ниже запрос будет работать, чтобы найти вторую самую высокую запись с NOT IN.
SELECT MAX(
userId
) FROM table WHERE userId
NOT IN (таблица SELECT MAX (userId
) FROM)
простой и полезный...
Чтобы получить вторую по величине зарплату, используйте это:
select salary from
(select s2.salary,rownum rm from
(select distinct salary from employees order by salary desc)
s2 where rownum<=2)
where rm >= 2
Он работает на вторую высшую зарплату,
$query = "SELECT * FROM `table_name` ORDER BY field_name` DESC LIMIT 1 , 1 ";
Вы можете ORDER BY column name
, а затем LIMIT 1,1
получить второй
изменить
Упс, не видел тег Oracle, извините. ORDER BY column name WHERE ROWNUM = 2
должен работать лучше.
SELECT DISTINCT (a.sal) FROM EMP A WHERE &N = (
SELECT COUNT (DISTINCT (b.sal)) FROM EMP B WHERE a.sal<=b.sal
);
Замените &N
на нужный номер. Например, 2
предоставит вам вторую по величине зарплату.
Если вы используете PL/SQL, просто выполните инструкцию. Он будет запрашивать N.
Попробуйте это,
SELECT Sal FROM Tab ORDER BY Sal DESC LIMIT 2,1
Попробуйте следующее:
SELECT DISTINCT TOP 3 id,[Password]
FROM Users_changepassword
WHERE [UserId] = 3
ORDER BY id DESC
Вы можете попробовать этот sql, где используется функция Row_number() из оракула sql
select column_name from (
select column_name ,
row_number() over (order by column_name desc) as row_num
from table_Name ) tablex
where row_num =3
SELECT MAX(Salary) FROM Employee
WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee)
Вы можете использовать CONNECT BY PRIOR
по:
CREATE TABLE t(i INT, sal INT);
INSERT INTO t(i, sal)
SELECT 1,100 FROM dual UNION
SELECT 2,100 FROM dual UNION
SELECT 3,200 FROM dual UNION
SELECT 4,500 FROM dual UNION
SELECT 5,1000 FROM dual;
Query:
SELECT level, MAX(sal) AS sal
FROM t
--WHERE level = 2 -- set position here
CONNECT BY prior sal > sal
GROUP BY level
ORDER BY level;
EDIT:
Второй подход заключается в использовании аналитической функции NTH_VALUE
:
SELECT DISTINCT NTH_VALUE(sal, 2) OVER(ORDER BY sal DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
FROM t;