DB2 - SQL- 将结果限制为仅在特定列中出现几次值

DB2 - SQL- restrict result to only a few occurrences of a value in a certain column

所以我的工作是 select 从 DB2 table 发送一些移动通知。 为了不向用户发送垃圾邮件,我想限制太多用户的 selection。所以我的目标是 select 每个用户最多 2 个通知。(其他的将 select 在下一份工作 运行 上编辑)。

例如,如果我的 table 看起来像这样:

+-----------------+---------+-----------+
| Notification_ID | User_ID |   text    |
+-----------------+---------+-----------+
|               1 |       1 | blablabla |
|               2 |       1 | blablabla |
|               3 |       1 | blablabla |
|               4 |       1 | blablabla |
|               5 |       2 | blablabla |
|               6 |       2 | blablabla |
|               7 |       2 | blablabla |
|               8 |       3 | blablabla |
|               9 |       3 | blablabla |
|              10 |       4 | blablabla |
+-----------------+---------+-----------+

我需要得到:

+-----------------+---------+-----------+
| Notification_ID | User_ID |   text    |
+-----------------+---------+-----------+
|               1 |       1 | blablabla |
|               2 |       1 | blablabla |
|               5 |       2 | blablabla |
|               6 |       2 | blablabla |
|               8 |       3 | blablabla |
|               9 |       3 | blablabla |
|              10 |       4 | blablabla |
+-----------------+---------+-----------+

您可以使用 row_number():

select n.*
from (select n.*,
             row_number() over (partition by user_id order by notification_id) as seqnum
      from notifications n
     ) n
where seqnum <= 2;