質問
私はJDBCを使用してTeradataから膨大なレコードのセットを取得しようとしています。そして、私はこのセットをSelectで「Top N」句を使用している部分に分割する必要があります。しかし、私たちのやり方のように「オフセット」を設定する方法がわかりません mysql -
SELECT * FROM tbl LIMIT 5,10
次のSelectステートメントが(n+1)th位置からレコードを取得するようになります。
解決
ランクと資格私はここにあなたの友達です
例えば
SEL RANK(custID), custID
FROM mydatabase.tblcustomer
QUALIFY RANK(custID) < 1000 AND RANK(custID) > 900
ORDER BY custID;
ランク(フィールド)は、結果セットのすべての行を(概念的に)取得し、フィールドごとに注文して注文し、インクリメントランクIDを割り当てます。
資格を使用すると、それをスライスすることができます。列をリクリエーション表現に制限することで、ランクを合法的に表示できるようになりました。
明確にするために、私はクエリの900-1000の行を返しています。CusotMersからすべてを選択し、900〜1000のIDを返す顧客を返しません。
他のヒント
使用することもできます 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
オプションのパーティションセットで注文している列が一意かどうかに関係なく、シーケンスを提供します。
考慮すべき別のオプション。
所属していません StackOverflow