Как мне сделать следующее?
select top 1 Fname from MyTbl
В Oracle 11g?
Если вы хотите только первую выбранную строку, вы можете:
select fname from MyTbl where rownum = 1
Вы также можете использовать аналитические функции для заказа и взять верхнюю часть x:
select max(fname) over (rank() order by some_factor) from MyTbl
SELECT *
FROM (SELECT * FROM MyTbl ORDER BY Fname )
WHERE ROWNUM = 1;
С Oracle 12c (июнь 2013 г.) вы можете использовать его, как показано ниже.
SELECT * FROM MYTABLE
--ORDER BY COLUMNNAME -OPTIONAL
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY
Вы можете использовать ROW_NUMBER()
с предложением ORDER BY
в подзапросе и использовать этот столбец вместо TOP N
. Это можно объяснить шаг за шагом.
См. таблицу ниже, в которой есть два столбца NAME
и DT_CREATED
.
Если вам нужно взять только первые две даты независимо от NAME
, вы можете использовать следующий запрос. Логика написана внутри запроса
-- The number of records can be specified in WHERE clause
SELECT RNO,NAME,DT_CREATED
FROM
(
-- Generates numbers in a column in sequence in the order of date
SELECT ROW_NUMBER() OVER (ORDER BY DT_CREATED) AS RNO,
NAME,DT_CREATED
FROM DEMOTOP
)TAB
WHERE RNO<3;
РЕЗУЛЬТАТ
В некоторых ситуациях нам нужно выбрать TOP N
результаты, соответствующие каждому NAME
. В этом случае мы можем использовать PARTITION BY
с предложением ORDER BY
в подзапросе. Обратитесь к следующему запросу.
-- The number of records can be specified in WHERE clause
SELECT RNO,NAME,DT_CREATED
FROM
(
--Generates numbers in a column in sequence in the order of date for each NAME
SELECT ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY DT_CREATED) AS RNO,
NAME,DT_CREATED
FROM DEMOTOP
)TAB
WHERE RNO<3;
РЕЗУЛЬТАТ
Вы можете сделать что-то вроде
SELECT *
FROM (SELECT Fname FROM MyTbl ORDER BY Fname )
WHERE rownum = 1;
Вы также можете использовать аналитические функции RANK и/или DENSE_RANK, но ROWNUM, вероятно, самый простой.
select * from (
select FName from MyTbl
)
where rownum <= 1;
Использование:
SELECT x.*
FROM (SELECT fname
FROM MyTbl) x
WHERE ROWNUM = 1
Если вы используете Oracle9i +, вы можете посмотреть с помощью аналитических функций, таких как ROW_NUMBER(), но они не будут работать так же, как ROWNUM.
Чтобы выбрать первую строку из таблицы и выбрать одну строку из таблицы, выполните две разные задачи и потребуется другой запрос. Существует много возможных способов сделать это. Четыре из них:
Первая
select max(Fname) from MyTbl;
Второе
select min(Fname) from MyTbl;
Третий
select Fname from MyTbl where rownum = 1;
Четвертый
select max(Fname) from MyTbl where rowid=(select max(rowid) from MyTbl)
У меня была та же проблема, и я могу исправить это с помощью этого решения:
select a.*, rownum
from (select Fname from MyTbl order by Fname DESC) a
where
rownum = 1
Вы можете заказать свой результат, прежде чем иметь первое значение сверху.
Удачи
select Fname from MyTbl where rownum>=1;