2014-05-11 2 views
0

Я пытаюсь получить только первую строку из этого запроса. Запрос не возвращает верхнюю строку. Вот запрос.Получить первую строку в Oracle Sql

SELECT DISTINCT name, age 
FROM donates, persons 
WHERE name = donor 
AND name IN (SELECT receiver FROM donates) 
AND ROWNUM <= 1 
ORDER BY age DESC; 

Когда я запустил запрос, он возвращает Chirs |35. Без таблицы ROWNUM <=1 это то, как выглядит таблица.

NAME | AGE 
------------- 
george | 62 
Chris | 35 
zara | 24 
+1

если оракул 12с, вы можете с помощью 'предела', смотрите HTTP: //www.oracle- base.com/articles/12c/row-limiting-clause-for-top-n-queries-12cr1.php –

ответ

1

Я думаю, что лучший способ получить это использовать подзапрос как ROWNUM в настоящее время рассматриваются в перед порядком так:

select * from (
SELECT DISTINCT name, age 
FROM donates, persons 
WHERE name = donor 
AND name IN (SELECT receiver FROM donates) 
ORDER BY age DESC 
) where ROWNUM <= 1; 

Для более читать взгляд на http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html

0

Вы пытаетесь получить тот, у кого минимальный возраст, поэтому я предлагаю вам использовать встроенную функцию Min sql:

SELECT name, Min(age) 
FROM donates, persons 
WHERE name = donor 
AND name IN (SELECT receiver FROM donates) 

Это хорошая практика, чтобы избежать rownum. И здесь вы получаете более семантический и эффективный запрос.

Надеется, что это помогает, Привет

+0

Это дает ошибку «не групповая групповая функция», вам нужна группа по функциям – FJam

1

Попробуйте использовать ROWID, а не ROWNUM вроде этого:

SELECT * FROM TABLE_NAME WHERE ROWID = (SELECT MIN(ROWID) FROM TABLE_NAME) 
+5

PLEASE DON ' T SHOUT AT US –

+1

Возможно, вы захотите изменить ROWDIR на ROWID; Для подобных задач ROWID лучше, чем ROWNUM – Verma

Смежные вопросы