如何在SQL数据库中根据条件统计每个用户ID的出现次数
我在MS SQL中有一个表,用于收集营销活动中每个ID的状态。每个月都会有一个专栏来检查每个消费者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分区,是在程序
是否在计划中
),如果是,每个月都会检查他们是否是我们计划中的新成员(是否是新成员
)。每个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;