2014-12-25 2 views
1

Я использую Oracle SQL, и мне нужна помощь с запросом.выберите строку минимального значения без использования rownum

В следующем запросе я выбираю несколько строк с простым условием (не считая шляпы). Из выходных строк мне нужно выбрать строку с минимальным значением DATE. Для этого я использую ROWNUM.

SELECT * 
FROM(
    SELECT NAME, DATE 
    FROM LIST 
    WHERE NAME = 'BLABLA' 
    ORDER by DATE) 
WHERE ROWNUM = 1; 

Однако этот запрос должен соответствовать любым другим языкам SQL, и поэтому я должен написать этот запрос без ROWNUM. Есть ли простой способ написать этот запрос, не используя ROWNUM?

ответ

2

К сожалению, синтаксис ограничения строки differs between RDBMS.

Ниже переносим между SqlServer, Oracle и Postgres:

SELECT * 
FROM (
    SELECT NAME, DATE, ROW_NUMBER() OVER (ORDER by DATE) AS RowNum 
    FROM LIST 
    WHERE NAME = 'BLABLA' 
) X 
WHERE RowNum = 1; 

Однако, синтаксис другого DB отличается, например, MySql's LIMIT

+0

Очень приятно. Благодаря! – Omri

+0

Подтверждено [PostGres] (http://sqlfiddle.com/#!15/23685/5) поддерживает синтаксис. – StuartLC

+0

Хотя самым простым и чистым способом было бы использовать функции аналитического окна: http://www.orafaq.com/node/55 – Gabriel

1
select * from LIST 
    where Date=(select min(date) from LIST where Name='BLABLA') 
    and Name='BLABLA' 
+0

При условии, что есть только одна строка с этой датой :) – StuartLC

+0

Да. ** Этот запрос неверен **. Суб select select min (date) из LIST "дает минимальное значение из всей таблицы, но не из соответствующих выбранных строк. – Omri

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