Teradata - 使用TOP限制结果

时间:2011-09-05 09:29:11

标签: sql teradata

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

   SELECT * FROM tbl LIMIT 5,10

以便下一个select语句从第(N + 1)个位置获取记录。

2 个答案:

答案 0 :(得分:6)

RANK和QUALIFY我相信你是这里的朋友

例如

 SEL RANK(custID), custID 
 FROM mydatabase.tblcustomer
 QUALIFY RANK(custID) < 1000 AND RANK(custID) > 900
 ORDER BY custID;

RANK(字段)将(从概念上)检索结果集的所有行, 通过ORDER BY字段对它们进行排序,并为它们分配递增的等级ID。

QUALIFY允许您通过限制返回到限定表达式的行来切片,现在可以合法地查看RANK。

要清楚,我将返回查询中的900-1000行,从cusotmers中选择所有行, 不归还ID在900到1000之间的客户。

答案 1 :(得分:5)

您还可以在Teradata上使用ROW_NUMBER窗口聚合。

SELECT ROW_NUMBER() OVER (ORDER BY custID) AS RowNum_
     , custID
  FROM myDatabase.myCustomers
QUALIFY RowNum_ BETWEEN 900 and 1000;

RANK窗口聚合不同,ROW_NUMBER将为您提供一个序列,无论您在可选分区集上排序的列是否唯一。

另一个需要考虑的选择。