DB2 SQL - ограничение количества возвращаемых групп - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь найти способ ограничения первых n возвращаемых групп. У меня есть сценарий, в котором я хочу выбрать только 10 групп пользовательских данных и не более. Как бы я ограничил 10 групп пользовательских данных, где размер группы для пользователя может варьироваться. Некоторые группы могут иметь более 4 записей для пользователя, некоторые могут иметь менее 4 записей для пользователя. Но я хочу получить только 10 пользователей одновременно. Я попытался подумать о том, как можно использовать ROW_NUMBER () и PARTITION BY или даже FETCH FIRST N ROWS ONLY, но не смог найти решение.

Ниже приведено несколько примеров. образец данных. ПРИМЕЧАНИЕ. Столбец GROUP_NUMBER не существует в наборе данных, с которым я работаю. Это то, что я думал о создании через SQL, чтобы я мог использовать это, чтобы выбрать, где, например, «GROUP_NUMBER» <11. Я абсолютно открыт для других решений, учитывая мой вопрос, но это было одно решение, о котором я думал, но не знал, как это сделать. </p>

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

1 Ответ

3 голосов
/ 02 апреля 2020

Вы можете использовать dense_rank(). Я думаю, что вы хотите:

select t.*
from (select t.*,
             dense_rank() over (order by requestId) as seqnum
      from t
     ) t
where seqnum <= 3;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...