2016-05-11 5 views
-2

私は現在Oracle 10gデータベースを照会するアプリケーションを開発中です。 Oracleには、SQL ServerでTop(x)を使用するのと同じことがありますか?私はそれがテーブルに追加される順序でデータが欲しいです。 ご協力いただければ幸いです。oracle10gのselect top相当品は何ですか

私は5つの最高値を望んでいないことに注意してください。私は5つのトップ値が欲しい。行がテーブルに追加された物理的な順序を序数位置といいます。インデックスでもソートはありません。

SELECT * 
FROM (
    SELECT * 
    FROM table_name 
    ORDER BY primary_key_column 
) 
WHERE ROWNUM <= 10; 

あなたは外側のクエリを必要としているためとして:あなたは、あなたが行うことができます(シーケンスまたは日付/タイムスタンプの値を経由して)主キーのインクリメント値でデータを挿入していると仮定すると

+0

読み取りを上位nとページネーションに関するトムを確認する:http://www.oracle.com/technetwork/issue-archive/2007/07-jan/o17asktom-を093877.htmlおよびhttp://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html –

+0

作成された日付タイプを表に格納するのか、シーケンスに格納するのかそうでない場合、Oracleは表に追加された行の順序を格納しないため、解決策はありません(rowid、rownum、またはデフォルトの順序を使用して行を表に挿入することはできません) 。 –

+0

[Oracle SQL - 列の上位5つの値を取得する方法](http://stackoverflow.com/questions/2306744/oracle-sql-how-to-retrieve-highest-5-values-of-a)の可能な複製-column) – MT0

答えて

3

これは、実行されるクエリで起こる:

  1. WHERE句フィルタが適用される(およびROWNUM擬似列が全てWHERE句フィルタに一致する行ごとに生成されます)。
  2. 次に、ORDER BY句が適用されます。

これを1回のクエリで適用すると、データベースで最初に見つかった10行が取得され、それらの行がプライマリキーで並べ替えられます。内部クエリを使用すると、最初にORDER BY句を適用してから、必要な数の行のフィルタリングを外部クエリの実行中に次に実行することができます。

ROWNUM句を使用せずにプライマリキーを増やす必要がある場合は、ORDER BY句を使用しないでください。ただし、テーブルに行移動が有効になっているか、行を削除して別の行この場合、データベースが新しい行で空白を埋めることがあります)、行が挿入順で取得されないことがあります。あなたはこの一緒に暮らすことができる場合は、単に実行します。

SELECT * 
FROM table_name 
WHERE ROWNUM <= 10; 
+0

あなたの答えは私の質問には答えません。私はそれらがテーブルに追加されるために、上位n行が必要であることを繰り返す。それを解決する答えを私に提供してください。 –

+0

@MukeshAdhvaryuテーブルに追加された順番で行を取得することはできません。(a)各連続する挿入にインクリメント値を割り当てる一意の列を保持している場合(その場合は、表示されている)または(b)テーブルから行を削除してから挿入しない(または行を移動する)**および**の場合、データベースは作成された順序でデータファイルにデータを挿入し、 (いずれも保証されていません)、次に注文を指定することはできません(私の2番目のクエリに従って)。 – MT0

+0

+1素敵な、完全な答え...私はあなたのものと非常に似た答えを提出することを検討しましたが、シーケンスや日付データ型がテーブルにあったかどうかは不明であったので、質問と移動... –

関連する問題