我可以使用IN和COUNT限制结果吗?

时间:2012-05-01 17:04:25

标签: oracle

我需要限制查询的结果,但是我无法实现我使用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条记录。我不知道该怎么做。如果我只是寻找一个错误,我可以简单地使用count或rownum。使用IN条件时不确定如何操作。

1 个答案:

答案 0 :(得分:1)

您是否关心针对任何特定错误代码获得哪两行?像这样的东西会为每个错误代码提供两行,其中rec值最小。如果更改ORDER BY分析函数中的ROW_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