Home > Back-end >  How to count the last records of a given status in SQL?
How to count the last records of a given status in SQL?

Time:04-05

I need to count the last few months a member has had a D status.

For example, I have the table below, where I have the months from February to August for 2 members.

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

I need to count the number of months a member has been in D status in a row. In this example the expected result would be:

member_id count status D
1010 2
1030 1

For member 1010 I need to count July and August, because in June he had A status.

Can anyone help me, please?

I'm a beginner and I have no idea how I can do this.

CodePudding user response:

We can try first filtering for each member to only latest D records. Then, aggregate by members and find the counts.

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;

CodePudding user response:

With SQL you could use for example:

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

But for begginer level it's a good idea to help yourself with w3schools: http://www-db.deis.unibo.it/courses/TW/DOCS/w3schools/sql/sql_func_count.asp.html

But of course any question is welcomed, good luck!

  • Related