Команда SQL для базы данных PROGRESS

Пожалуйста, потерпите меня, новичок в SQL - я пытаюсь написать команду SQL с соединением в базе данных PROGRESS. Затем я хотел бы выбрать только первую совпадающую запись из соединения. Я думал использовать LIMIT, но PROGRESS этого не поддерживает. Я думаю, что MIN или TOP также будут работать, но у меня проблемы с синтаксисом. Вот текущий синтаксис:

SELECT esthead_0."k-est-code", estdie_0."estd-size2", estdie_0."k-cmp-no", estdie_0."estd-cal"
  FROM VISION.PUB.estdie estdie_0 
INNER JOIN VISION.PUB.esthead esthead_0 ON estdie_0."k-est-code" = esthead_0."k-est-code"
 WHERE estdie_0."k-cmp-no" = (SELECT MIN("k-cmp-no") 
                                FROM VISION.PUB.estdie estdie_0 )

Это выберет MIN из всей таблицы, но я хотел бы, чтобы MIN записей возвращалось объединением для каждого «k-est-code».


person Community    schedule 06.10.2009    source источник
comment
Что такое база данных PROGRESS? может постгрес?   -  person recursive    schedule 06.10.2009
comment
PROGRESS прав, это компания, которая продает собственную версию rdbms, как ORACLE и MS. Хотя и не такой популярный... нас продавали в системе ПРОГРЕСС, слава богу, мы отказались от этого...   -  person JonH    schedule 06.10.2009


Ответы (2)


Чтобы сделать то, что вы делаете, вам нужно использовать агрегатные функции и GROUP BY.

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

SELECT esthead_0."k-est-code", estdie_0."estd-size2", MIN(estdie_0."k-cmp-no") AS k-cmp-no-minimum, estdie_0."estd-cal"
  FROM VISION.PUB.estdie estdie_0 
  INNER JOIN VISION.PUB.esthead esthead_0 ON estdie_0."k-est-code" = esthead_0."k-est-code"
 GROUP BY esthead_0."k-est-code", estdie_0."estd-size2", estdie_0."estd-cal"

The general syntax for adding a GROUP BY / Aggregate query is:

  1. используйте агрегатную функцию, такую ​​как MIN(), MAX(), AVG(), SUM(), чтобы выбрать, какой столбец вы хотите... (выберите функцию в зависимости от того, хотите ли вы минимум, максимум и т. д.). Есть те, которые я перечислил, которые являются стандартными, а затем часто ваша база данных также даст вам некоторые дополнительные.

  2. Добавьте все остальные столбцы, которые вы выбираете, ЗА ИСКЛЮЧЕНИЕМ столбцов в функции, в GROUP BY в конце вашего запроса.

  3. Ваш GROUP BY должен появиться после вашего WHERE, но перед вашим ORDER BY.

  4. Если вы хотите выполнить WHERE-подобную фильтрацию функции (скажем, вам нужно только k-cmp-no over 100), вы используете HAVING после группы, например:

    ИМЕЕТ МИН(estdie_0."k-cmp-no") > 100

Google для функций Group By и Aggregate для получения дополнительной информации об этой концепции SQL. Он работает одинаково во всех базах данных, как и стандартный ANSI SQL. См. эту страницу для более подробного ознакомления с примерами: http://www.w3schools.com/sql/sql_groupby.asp

person Professor Falken    schedule 18.10.2011

Progress (OE 11.2) поддерживает OFFSET FETCH, который аналогичен LIMIT OFFSET в mysql.

Пример:

SQLExplorer>select FirstName , LastName , EmpNum from pub.employee order by empnum offset 10 rows fetch next 10 rows only;
FirstName                      LastName                                                EmpNum
------------------------------ -------------------------------------------------- -----------
Frank                          Garsen                                                      11
Jenny                          Morris                                                      12
Luke                           Sanders                                                     13
Marcy                          Adams                                                       14
Alex                           Simons                                                      15
Holly                          Atkins                                                      16
Larry                          Barry                                                       17
Jean                           Brady                                                       18
Larry                          Dawsen                                                      19
Dan                            Flanagan                                                    20

Надеюсь это поможет

person Jyothi    schedule 29.07.2016