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;
所以我的工作是 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;