Ответ 1
Вы используете ROWNUM.
т.
SELECT user FROM Dual WHERE ROWNUM = 1
http://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm
Я хочу использовать синтаксис oracle для выбора только 1 строки из таблицы DUAL
. Например, я хочу выполнить этот запрос:
SELECT user
FROM DUAL
... и у него было бы, например, 40 записей. Но мне нужна только одна запись.... И, я хочу, чтобы это произошло без предложения WHERE
.
Мне нужно что-то в поле table_name, например:
SELECT FirstRow(user)
FROM DUAL
Вы используете ROWNUM.
т.
SELECT user FROM Dual WHERE ROWNUM = 1
http://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm
Я нашел это "решение" скрытым в одном из комментариев. Поскольку я искал это некоторое время, я хотел бы выделить его немного (пока не могу комментировать или делать такие вещи...), поэтому я использовал это:
SELECT * FROM (SELECT [Column] FROM [Table] ORDER BY [Date] DESC) WHERE ROWNUM = 1
Это напечатает нужную запись [Column] из последней записи в таблице, предполагая, что [Date] всегда вставлена через SYSDATE.
Этот синтаксис доступен в Oracle 12c:
select * from some_table fetch first 1 row only;
select * from some_table fetch first 1 rows only;
select * from some_table fetch first 10 row only;
select * from some_table fetch first 10 rows only;
^^ Я просто хотел продемонстрировать, что любая строка или строки (множественное число) могут использоваться независимо от множества требуемого количества строк.)
Насколько я знаю, таблица dual
в Oracle - это специальная таблица с одной строкой. Таким образом, этого было бы достаточно:
SELECT user
FROM dual
Вы должны использовать вложенный запрос как:
SELECT *
FROM ANY_TABLE_X
WHERE ANY_COLUMN_X = (SELECT MAX(ANY_COLUMN_X) FROM ANY_TABLE_X)
=> В PL/SQL "ROWNUM = 1" НЕ равно "ТОП 1" TSQL.
Таким образом, вы не можете использовать запрос, подобный следующему: "select * from any_table_x, где rownum = 1 order by any_column_x;" Поскольку оракул получает первую строку, то применяется порядок по предложению.
В Oracle нет условия limit 1
(thats MySQL/PostgresSQL), вам нужно указать where rownum = 1
.
"FirstRow" - это ограничение и поэтому оно помещается в предложение where
не в предложении select
. И это называется rownum
select * from dual where rownum = 1;
у нас есть 3 варианта получения первой строки в таблице БД Oracle.
1) select * from table_name where rownum= 1
- лучший способ
2) select * from table_name where id = ( select min(id) from table_name)
3)
select * from
(select * from table_name order by id)
where rownum = 1
Если какая-либо строка будет делать, попробуйте:
select max(user)
from table;
Нет предложения where.
select name, price
from (
select name, price,
row_number() over (order by price) r
from items
)
where r between 1 and 5;
select a.user from (select user from users order by user) a where rownum = 1
будет работать лучше, другой вариант:
select a.user
from (
select user,
row_number() over (order by user) user_rank,
row_number() over (partition by dept order by user) user_dept_rank
from users
) a
where a.user_rank = 1 or user_dept_rank = 2
в сценариях, где вам нужны разные подмножества, но я думаю, вы также можете использовать RANK()
Но мне также нравится row_number()
over(...)
, поскольку группировка не требуется.
Более гибким, чем select max()
, является:
select distinct first_row(column_x) over (order by column_y,column_z,...) from Table_A