Подтвердить что ты не робот

Как выбрать только 1 строку из oracle sql?

Я хочу использовать синтаксис oracle для выбора только 1 строки из таблицы DUAL. Например, я хочу выполнить этот запрос:

SELECT user 
  FROM DUAL

... и у него было бы, например, 40 записей. Но мне нужна только одна запись.... И, я хочу, чтобы это произошло без предложения WHERE.

Мне нужно что-то в поле table_name, например:

SELECT FirstRow(user) 
  FROM DUAL
4b9b3361

Ответ 2

Я нашел это "решение" скрытым в одном из комментариев. Поскольку я искал это некоторое время, я хотел бы выделить его немного (пока не могу комментировать или делать такие вещи...), поэтому я использовал это:

SELECT * FROM (SELECT [Column] FROM [Table] ORDER BY [Date] DESC) WHERE ROWNUM = 1

Это напечатает нужную запись [Column] из последней записи в таблице, предполагая, что [Date] всегда вставлена ​​через SYSDATE.

Ответ 3

Этот синтаксис доступен в 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;

^^ Я просто хотел продемонстрировать, что любая строка или строки (множественное число) могут использоваться независимо от множества требуемого количества строк.)

Ответ 4

Насколько я знаю, таблица dual в Oracle - это специальная таблица с одной строкой. Таким образом, этого было бы достаточно:

SELECT user
FROM dual

Ответ 5

Is ответ:

Вы должны использовать вложенный запрос как:

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;" Поскольку оракул получает первую строку, то применяется порядок по предложению.

Ответ 6

В Oracle нет условия limit 1 (thats MySQL/PostgresSQL), вам нужно указать where rownum = 1.

Ответ 7

"FirstRow" - это ограничение и поэтому оно помещается в предложение where не в предложении select. И это называется rownum

select * from dual where rownum = 1;

Ответ 8

у нас есть 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

Ответ 9

Если какая-либо строка будет делать, попробуйте:

select max(user)  
from table;

Нет предложения where.

Ответ 10

select name, price
  from (
    select name, price, 
    row_number() over (order by price) r
      from items
  )
where r between 1 and 5; 

Ответ 11

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(...), поскольку группировка не требуется.

Ответ 12

Более гибким, чем select max(), является:

select distinct first_row(column_x) over (order by column_y,column_z,...) from Table_A