Sql Teradata-使用TOP限制结果
我正在尝试使用JDBC从Teradata获取大量记录。我需要把这个集合分成几个部分,在select中使用“Top N”子句。 但是我不知道如何像在MySQL中那样设置“偏移量”-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) &
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
语义,应使用行数()。