我正在尝试使用JDBC从Teradata获取大量记录。我需要将这个集合分成我在select中使用“Top N”子句的部分。 但我不知道如何设置“偏移”,就像我们在 MySQL 中所做的那样 -
SELECT * FROM tbl LIMIT 5,10
以便下一个select语句从第(N + 1)个位置获取记录。
答案 0 :(得分:6)
RANK和QUALIFY我相信你是这里的朋友
例如
SEL RANK(custID), custID
FROM mydatabase.tblcustomer
QUALIFY RANK(custID) < 1000 AND RANK(custID) > 900
ORDER BY custID;
RANK(字段)将(从概念上)检索结果集的所有行, 通过ORDER BY字段对它们进行排序,并为它们分配递增的等级ID。
QUALIFY允许您通过限制返回到限定表达式的行来切片,现在可以合法地查看RANK。
要清楚,我将返回查询中的900-1000行,从cusotmers中选择所有行, 不归还ID在900到1000之间的客户。
答案 1 :(得分:5)
您还可以在Teradata上使用ROW_NUMBER
窗口聚合。
SELECT ROW_NUMBER() OVER (ORDER BY custID) AS RowNum_
, custID
FROM myDatabase.myCustomers
QUALIFY RowNum_ BETWEEN 900 and 1000;
与RANK
窗口聚合不同,ROW_NUMBER
将为您提供一个序列,无论您在可选分区集上排序的列是否唯一。
另一个需要考虑的选择。