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 条记录。我不知道该怎么做。如果我只是在寻找一个错误,我可以简单地使用 count 或 rownum。使用 IN 条件时不知道该怎么做。

4

1 回答 1

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
于 2012-05-01T17:07:16.940 回答