Teradata-ограничение результатов с помощью TOP

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

   SELECT * FROM tbl LIMIT 5,10

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

2 ответов


ранг и квалификация я верю, что ваши друзья здесь

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

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

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

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


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

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

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

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