質問

私は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 オプションのパーティションセットで注文している列が一意かどうかに関係なく、シーケンスを提供します。

考慮すべき別のオプション。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top