如何在SQL数据库中根据条件统计每个用户ID的出现次数

如何在SQL数据库中根据条件统计每个用户ID的出现次数,sql,sql-server,gaps-and-islands,Sql,Sql Server,Gaps And Islands,我在MS SQL中有一个表,用于收集营销活动中每个ID的状态。每个月都会有一个专栏来检查每个消费者ID是否在营销活动中(是否在计划中),如果是,每个月都会检查他们是否是我们计划中的新成员(是否是新成员)。每个ID可以在程序中多次应用 我的表包含datetime(在每个月的最后一天报告,没有跳过的月份)、ID、每个ID的状态,如上所述。我想检查每个时段,每个ID在这个节目中的时间(在EXPECTED列) 在我的Output列中,我尝试使用ROW\u NUMBER()函数,该函数由id分区,是在程序

我在MS SQL中有一个表,用于收集营销活动中每个ID的状态。每个月都会有一个专栏来检查每个消费者ID是否在营销活动中(
是否在计划中
),如果是,每个月都会检查他们是否是我们计划中的新成员(
是否是新成员
)。每个ID可以在程序中多次应用

我的表包含datetime(在每个月的最后一天报告,没有跳过的月份)、ID、每个ID的状态,如上所述。我想检查每个时段,每个ID在这个节目中的时间(在
EXPECTED
列)

在我的
Output
列中,我尝试使用
ROW\u NUMBER()
函数,该函数由
id
分区,
是在程序中
是新的应用
是在程序中
时,
是新的应用
都是1。但是当
是新的\u apply==0时,我无法检查每个ID的出现情况

+------------+-------+-----------------+--------------+--------+----------+
|  datetime  |  ID   | is_in_programme | is_new_apply | Output | EXPECTED |
+------------+-------+-----------------+--------------+--------+----------+
| 31/01/2020 | 12345 |               1 |            1 |      1 |        1 |
| 29/02/2020 | 12345 |               1 |            0 |      0 |        1 |
| 31/03/2020 | 12345 |               1 |            0 |      0 |        1 |
| 30/04/2020 | 12345 |               1 |            0 |      0 |        1 |
| 31/05/2020 | 12345 |               0 |            0 |      0 |        0 |
| 30/06/2020 | 12345 |               1 |            1 |      2 |        2 |
| 31/07/2020 | 12345 |               1 |            0 |      0 |        2 |
| 31/08/2020 | 12345 |               1 |            0 |      0 |        2 |
| 31/01/2020 | 67890 |               0 |            0 |      0 |        0 |
| 29/02/2020 | 67890 |               1 |            1 |      1 |        1 |
| 31/03/2020 | 67890 |               1 |            0 |      0 |        1 |
| 30/04/2020 | 67890 |               0 |            0 |      0 |        0 |
| 31/05/2020 | 67890 |               0 |            0 |      0 |        0 |
| 30/06/2020 | 67890 |               1 |            1 |      2 |        2 |
| 31/07/2020 | 67890 |               1 |            0 |      0 |        2 |
| 31/08/2020 | 67890 |               1 |            0 |      0 |        2 |
| 30/09/2020 | 67890 |               0 |            0 |      0 |        0 |
| 31/10/2020 | 67890 |               1 |            1 |      3 |        3 |
| 30/11/2020 | 67890 |               1 |            0 |      0 |        3 |
| 31/12/2020 | 67890 |               1 |            0 |      0 |        3 |
+------------+-------+-----------------+--------------+--------+----------+

有没有办法像我的
预期
专栏那样,检查每个ID在每个时期的营销活动中出现了多少次?

是在计划中的
不是
0
时,您似乎想要一个
是新的\u应用的
的累计总和。这将是:

select t.*,
       (case when is_in_program <> 0
             then sum(is_new_apply) over (partition by id order by datetime)
             else 0
        end) as expected
from t;
选择t.*,
(当_在_程序0中时的情况)
然后求和(按id划分,按日期时间排序)
其他0
(完)如期
从t;