Teradata - ограничение результатов с помощью TOP - PullRequest
6 голосов
/ 05 сентября 2011

Я пытаюсь получить огромный набор записей из Teradata, используя JDBC. И мне нужно разбить этот набор на части, для которых я использую предложение «Top N» в select. Но я не знаю, как установить «Смещение», как, например, в MySQL -

   SELECT * FROM tbl LIMIT 5,10

так, чтобы следующий оператор выбора выбрал мне записи из (N + 1) -й позиции.

Ответы [ 2 ]

6 голосов
/ 05 сентября 2011

RANK и QUALIFY Я считаю, что ваши друзья здесь

например

 SEL RANK(custID), custID 
 FROM mydatabase.tblcustomer
 QUALIFY RANK(custID) < 1000 AND RANK(custID) > 900
 ORDER BY custID;

RANK (поле) (концептуально) извлечет все строки набора результатов, упорядочить их по полю ORDER BY и присвоить им возрастающий идентификатор ранга.

QUALIFY позволяет вам нарезать это, ограничивая строки, возвращаемые квалификационным выражением, которые теперь могут легально просматривать RANK.

Чтобы было ясно, я возвращаю 900-1000-ю строки в запросе select all из cusotmers, НЕ возвращать клиентов с идентификаторами от 900 до 1000.

5 голосов
/ 06 сентября 2011

Вы также можете использовать агрегат окон ROW_NUMBER в Teradata.

SELECT ROW_NUMBER() OVER (ORDER BY custID) AS RowNum_
     , custID
  FROM myDatabase.myCustomers
QUALIFY RowNum_ BETWEEN 900 and 1000;

В отличие от агрегата окон RANK, ROW_NUMBER предоставит вам последовательность независимо от того, какой столбец вы заказываетедополнительный набор разделов является уникальным или нет.

Еще один вариант для рассмотрения.

...