DB2SQL—限制返回的组数

DB2SQL—限制返回的组数,sql,db2,Sql,Db2,我试图找到一种方法来限制返回的前n个组。我有一个场景,我只想选择10组用户数据,而不想选择更多。如果用户的组大小可能不同,我如何限制10组用户数据。某些组的用户记录可能多于4条,某些组的用户记录可能少于4条。但我一次只想获得10个用户。我试着思考如何利用ROW_NUMBER和PARTITION BY,甚至如何利用FETCH FIRST N ROWS,但没有找到解决方案 下面是一些示例数据。注意:我使用的数据集中不存在GROUP_NUMBER列。这就是我想通过SQL创建的,这样我就可以利用它来选择

我试图找到一种方法来限制返回的前n个组。我有一个场景,我只想选择10组用户数据,而不想选择更多。如果用户的组大小可能不同,我如何限制10组用户数据。某些组的用户记录可能多于4条,某些组的用户记录可能少于4条。但我一次只想获得10个用户。我试着思考如何利用ROW_NUMBER和PARTITION BY,甚至如何利用FETCH FIRST N ROWS,但没有找到解决方案

下面是一些示例数据。注意:我使用的数据集中不存在GROUP_NUMBER列。这就是我想通过SQL创建的,这样我就可以利用它来选择组号<11的位置。考虑到我的问题,我完全愿意接受其他解决方案,但这是我一直在考虑但不知道如何去做的一个解决方案

+-----------+--------------+-----------+-----------+----------+------------------+--------------+
| REQUESTID |    USERID    | COMPANYID | FIRSTNAME | LASTNAME |      EMAIL       | GROUP_NUMBER |
+-----------+--------------+-----------+-----------+----------+------------------+--------------+
|       157 | test.bulkup1 |        44 | BulkUp    | Test     | bulkup1@test.com |            1 |
|       157 | test.bulkup1 |        44 | BulkUp    | Test     | bulkup1@test.com |            1 |
|       157 | test.bulkup1 |        44 | BulkUp    | Test     | bulkup1@test.com |            1 |
|       162 | test.bulkup2 |        44 | BulkUp    | Test     | bulkup2@test.com |            2 |
|       162 | test.bulkup2 |        44 | BulkUp    | Test     | bulkup2@test.com |            2 |
|       162 | test.bulkup2 |        44 | BulkUp    | Test     | bulkup2@test.com |            2 |
|       162 | test.bulkup2 |        44 | BulkUp    | Test     | bulkup2@test.com |            2 |
|       187 | test.bulkup3 |        44 | BulkUp    | Test     | bulkup3@test.com |            3 |
|       187 | test.bulkup3 |        44 | BulkUp    | Test     | bulkup3@test.com |            3 |
|       187 | test.bulkup3 |        44 | BulkUp    | Test     | bulkup3@test.com |            3 |
|       187 | test.bulkup3 |        44 | BulkUp    | Test     | bulkup3@test.com |            3 |
|       192 | test.bulkup4 |        44 | BulkUp    | Test     | bulkup4@test.com |            4 |
+-----------+--------------+-----------+-----------+----------+------------------+--------------+
你可以使用稠密的等级。我想你想要:

select t.*
from (select t.*,
             dense_rank() over (order by requestId) as seqnum
      from t
     ) t
where seqnum <= 3;
你可以使用稠密的等级。我想你想要:

select t.*
from (select t.*,
             dense_rank() over (order by requestId) as seqnum
      from t
     ) t
where seqnum <= 3;

您的组号看起来很像requestid。@GordonLinoff已更新,以反映requestid的实际外观。上面显示的数据在几个表之间联接,因此REQUESTID实际上可以是任何数字。我会试试你的密级,谢谢!您的组号看起来很像requestid。@GordonLinoff已更新,以反映requestid的实际外观。上面显示的数据在几个表之间联接,因此REQUESTID实际上可以是任何数字。我会试试你的密级,谢谢!