Как мне сделать топ-1 в Oracle?
9 196
9 ответов:
Если вы хотите только первую выбранную строку, вы можете:
select fname from MyTbl where rownum = 1
вы также можете использовать аналитические функции, чтобы заказать и взять верхний x:
select max(fname) over (rank() order by some_factor) from MyTbl
С 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;
вы также можете использовать аналитические функции ранг и/или DENSE_RANK, а ROWNUM - Это, наверное, самый простой.
использование:
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)