如何计算给定状态的最后记录?
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;
我需要统计最近几个月会员的状态是 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;