JDBC を使用して Teradata から大量のレコードを取得しようとしています。そして、このセットを、select で "Top N" 句を使用している部分に分割する必要があります。しかし、 MySQLのように「オフセット」を設定する方法がわかりません-
SELECT * FROM tbl LIMIT 5,10
次のselectステートメントが(N + 1)番目の位置からレコードをフェッチするようにします。
RANK と QUALIFY ここにあなたの友達がいると信じています
例えば
SEL RANK(custID), custID
FROM mydatabase.tblcustomer
QUALIFY RANK(custID) < 1000 AND RANK(custID) > 900
ORDER BY custID;
RANK(field) は、(概念的に) 結果セットのすべての行を取得し、ORDER BY フィールドで並べ替え、インクリメントするランク ID をそれらに割り当てます。
QUALIFY を使用すると、正規に RANK を表示できるようになった修飾式に返される行を制限することで、それをスライスできます。
明確にするために、900 から 1000 の間の ID を持つ顧客を返すのではなく、クエリ select all from cusotmers の 900 から 1000 番目の行を返します。
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
オプションのパーティション セットで並べ替えている列が一意であるかどうかに関係なく、シーケンスが提供されます。
考慮すべきもう1つのオプション。