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