题
我正在尝试使用JDBC从Teradata获取大量记录。而且我需要将此集合分为我在SELECT中使用的“ Top N”子句的部分。但是我不知道如何设置“偏移”,就像我们在 mysql -
SELECT * FROM tbl LIMIT 5,10
因此,下一个选择语句将从(n+1)位置获取记录。
解决方案
排名和资格我相信您是您的朋友
例如
SEL RANK(custID), custID
FROM mydatabase.tblcustomer
QUALIFY RANK(custID) < 1000 AND RANK(custID) > 900
ORDER BY custID;
等级(字段)将(从概念上)检索结果集的所有行,按顺序订购它们,并为其分配增量级别ID。
合格使您可以通过将返回到资格表达式的行限制为现在可以合法地查看等级来切片。
需要明确的是,我将在查询中返回第900-1000行从Cusotmers中选择,而不是返回具有900至1000之间的ID的客户。
其他提示
您也可以使用 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
无论您在可选分区集上订购的列是否是唯一的,都会为您提供序列。
只是要考虑的另一个选择。
不隶属于 StackOverflow