限制2列组合的记录

时间:2012-06-19 19:39:10

标签: sql oracle

在查询2列之间的组合时寻找一些限制结果的帮助。这是我正在使用的那种表的一个例子..

id  name  group  state
1   Bob   A      NY
2   Jim   A      NY
3   Dan   A      NY
4   Mike  A      FL
5   Tim   B      NY
6   Sam   B      FL
7   Brad  B      FL
8   Glen  B      FL
9   Ben   C      FL

我正在尝试显示“group”和“state”的所有组合的所有记录,但限制为每个组合最多只显示2条记录。结果应如下所示..

id    name  group   state
1     Bob   A       NY
2     Jim   A       NY
4     Mike  A       FL
5     Tim   B       NY
6     Sam   B       FL
7     Brad  B       FL
9     Ben   C       FL

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

假设您始终希望每个groupstate组合的两行与最低id

SELECT *
  FROM (SELECT a.*,
               row_number() over (partition by group, state
                                      order by id asc) rnk
          FROM your_table a)
 WHERE rnk <= 2

当然,由于group是保留字,我假设您的列实际上是其他名称...您需要调整我的查询以使用正确的列名。