7

JDBC を使用して Teradata から大量のレコードを取得しようとしています。そして、このセットを、select で "Top N" 句を使用している部分に分割する必要があります。しかし、 MySQLのように「オフセット」を設定する方法がわかりません-

   SELECT * FROM tbl LIMIT 5,10

次のselectステートメントが(N + 1)番目の位置からレコードをフェッチするようにします。

4

2 に答える 2

7

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 番目の行を返します。

于 2011-09-05T13:09:58.773 に答える
6

ROW_NUMBERTeradata でウィンドウ集計を使用することもできます。

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

RANKWindows アグリゲートとは異なり、ROW_NUMBERオプションのパーティション セットで並べ替えている列が一意であるかどうかに関係なく、シーケンスが提供されます。

考慮すべきもう1つのオプション。

于 2011-09-06T13:24:19.677 に答える