Sql Teradata-使用TOP限制结果

Sql Teradata-使用TOP限制结果,sql,teradata,Sql,Teradata,我正在尝试使用JDBC从Teradata获取大量记录。我需要把这个集合分成几个部分,在select中使用“Top N”子句。 但是我不知道如何像在MySQL中那样设置“偏移量”- SELECT * FROM tbl LIMIT 5,10 这样,下一个select语句将从第(N+1)位获取记录。排名和资格我相信您是这里的朋友 比如说 SEL RANK(custID), custID FROM mydatabase.tblcustomer QUALIFY RANK(custID) &

我正在尝试使用JDBC从Teradata获取大量记录。我需要把这个集合分成几个部分,在select中使用“Top N”子句。 但是我不知道如何像在MySQL中那样设置“偏移量”-

   SELECT * FROM tbl LIMIT 5,10

这样,下一个select语句将从第(N+1)位获取记录。

排名和资格我相信您是这里的朋友

比如说

 SEL RANK(custID), custID 
 FROM mydatabase.tblcustomer
 QUALIFY RANK(custID) < 1000 AND RANK(custID) > 900
 ORDER BY custID;
SEL秩(custID),custID
从mydatabase.tblcustomer
合格等级(客户ID)<1000且等级(客户ID)>900
客户订购;
RANK(field)将(从概念上)检索resultset的所有行, 按照order by字段对它们进行排序,并为它们分配递增的秩ID

限定允许您通过限制返回到限定表达式的行来对其进行切片,限定表达式现在可以合法地查看列组

为了清楚起见,我将返回查询select all from cusotmers中的第900-1000行,
不返回ID在900到1000之间的客户。

您也可以在Teradata上使用
行号
窗口聚合

SELECT ROW_NUMBER() OVER (ORDER BY custID) AS RowNum_
     , custID
  FROM myDatabase.myCustomers
QUALIFY RowNum_ BETWEEN 900 and 1000;
与windows聚合的
RANK
不同,
ROW\u NUMBER
将为您提供一个序列,而不管您在可选分区集上排序的列是否唯一


另一个要考虑的选项。

我建议使用Windows聚合版本的<代码>秩({列})< /代码>前进。自Teradata 12以来,此答案中所示的排名一直被弃用<代码>排名()(按客户ID排序)为排名,然后
在排名上进行限定。介于900和1000之间
。如果包含
分区依据
(可选)子句,则可以在列的分区集更改时重置排名。请记住,如果您所排序的列不是唯一的,则秩将不会为您提供纯序列。
RANK()
对应于带有关系的
TOP n
语义。对于
TOP n
LIMIT
语义,应使用
行数()。