Teradata - 使用TOP限制结果

Aan*_*and 6 sql teradata

我试图使用JDBC从Teradata获取大量记录.我需要将这个集合分成我在select中使用"Top N"子句的部分.但我不知道如何设置"偏移"就像我们在MySQL中做的那样-

   SELECT * FROM tbl LIMIT 5,10
Run Code Online (Sandbox Code Playgroud)

这样下一个select语句就会从第(N + 1)个位置获取记录.

you*_*hat 6

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之间的客户.


Rob*_*ler 5

您还可以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无论您通过可选分区集排序的列是否唯一,都将为您提供序列.

只是另一种选择.