2012-05-01 15 views
1

クエリの結果を制限する必要がありますが、countとrownumを使って見た例は実装できません。このテーブルが与えられたINとCOUNTを使用して結果を制限できますか?

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つ以上のレコードを返したいとします。私はこれを行う方法がわかりません。私が単一のエラーだけを探していたなら、私は単純にcountまたはrownumを使うことができました。 IN条件を使用しているときにそれを行う方法がわかりません。

答えて

1

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

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 
+0

これは素晴らしい機能でした。 – brandon

関連する問題