1

クエリの結果を制限する必要がありますが、count と rownum を使用して見た例を実装できません。この表を考えると

rec error
___ _____
  1   123
  2   123
  3   456
  4   456
  5   456
  6   456
  7   456
  8   456
  9   456
 10   789
 11   789
 12   789
 13   789

このテーブルには、さまざまなエラー コードを含むさらに多くの行があります。これを使用して、必要なレコードを取得しています。

select rec, error from table where error in (123,456,789)

しかし、エラーごとに 2 つ以下のレコードのみを返したいとします。これを行う方法がわかりません。1 つのエラーだけを探している場合は、単純に count または rownum を使用できます。IN条件を使用する場合の方法がわかりません。

4

1 に答える 1

1

特定のエラー コードに対してどの 2 行が表示されるか気にしますか? recこのようなものは、最小値を持つ各エラー コードの 2 つの行を取得します。分析関数で を変更すると、返される 2 つの行を変更できますORDER BYROW_NUMBER

SELECT rec,
       error
  FROM (SELECT rec,
               error,
               row_number() over (partition by error
                                      order by rec asc) rnk
          FROM your_table_name)
 WHERE error in (123,456,789)
   AND rnk <= 2
于 2012-05-01T17:07:16.940 に答える