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
предоставит вам последовательность независимо от того, является ли столбец, который вы заказываете по необязательному набору разделов, уникальным или нет.
просто еще один вариант для рассмотрения.