我需要统计一下过go 几个月一位会员的D状态.

例如,我有下表,其中有2名成员从2月到8月的月份.

year_month member_id status
2020_02 1010 D
2020_03 1010 D
2020_04 1010 D
2020_05 1010 A
2020_06 1010 A
2020_07 1010 D
2020_08 1010 D
2020_02 1030 A
2020_03 1030 A
2020_04 1030 A
2020_05 1030 D
2020_06 1030 A
2020_07 1030 A
2020_08 1030 D

我需要计算一个成员连续处于D状态的月数.在本例中,预期结果为:

member_id count status D
1010 2
1030 1

对于1010成员,我需要计算7月和8月,因为在6月,他有一个身份.

谁能帮帮我吗?

我是个初学者,不知道该怎么做.

推荐答案

我们可以try 先对每个成员筛选到最新的D条记录.然后,按成员进行聚合,并找到计数.

SELECT member_id, COUNT(*) AS count_status_D
FROM
(
    SELECT member_id
    FROM yourTable t1
    WHERE status = 'D' AND
          NOT EXISTS (SELECT 1
                      FROM yourTable t2
                      WHERE t2.member_id = t1.member_id AND
                            t2.year_month > t1.year_month AND
                            t2.status <> 'D')
) t
GROUP BY member_id;

Sql相关问答推荐

SQL是否可以计算每年的所有日期变化?

如果开始期间不存在PostgresSql回填数据

有没有办法用SQL编写一条CASE语句,如果列A&>0,那么列B,列C=0

PostgreSQL:使用JSONB中的字段使用jsonb_to_Records()填充记录

使用Kotlin Exposed SQL DSL Select 多个值并排序

用于过滤嵌套对象或数组中的JSON数据的WHERE条件

在MS Access Modern图表的X轴上显示时间值时遇到问题

group-by-clause具有特定列,而不是oracle的toad中的all

在 PostgreSQL 中生成时间序列查询

如何创建snowflake表(动态查找数据类型)并从阶段加载(AWS S3)?

如何根据 SQL 中的阈值标记一个集群中的所有值?

MySQL中的递归查询邻接表深度优先?

AdventureWorks 查询

通过ID和数据找到每个不同的值

当 2 列具有静态值并且第 3 列使用运算符 IN 时,对 PostgreSQL 和 3 列上的复杂索引的最佳查询

如何在 ClickHouse SQL 中使用 CTE 将邻居语句中的数字作为偏移量传递?

String_Split 多列

Select 给定类别列表(或更多类别)中的所有事物

如何跨行合并以删除 SQL 中的空值?

SQL:有没有办法根据另一列的数据细节过滤和形成另一列?