如何计算给定状态的最后记录?

How to count the last records of a given status?

我需要统计最近几个月会员的状态是 D。

例如,我有下面的 table,其中有 2 位成员从二月到八月的月份。

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月他的状态是A

有人能帮帮我吗?

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

使用 SQL 你可以使用例如:

SELECT COUNT(DISTINCT member_ID) AS member_ID FROM Table WHERE Status = D;

更多信息:http://www-db.deis.unibo.it/courses/TW/DOCS/w3schools/sql/sql_func_count.asp.html

我们可以尝试先为每个成员过滤到最新的 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;