I am trying to run a MySQL query but not quite sure how to do it. I want to count the number of consecutive rows that match. For example
A A A B B B B A A
I want the outcome to be 3
It is easy to count the total number of A
but im not sure out to out the 3 most recent only.
Here is an example of how im listing all
SELECT email,subject FROM tablename where email='test@example.com' and subject='FAIL';
Edit: Here is some sample data that might help. For simplicity We will just have ID and Subject and order by ID
ID Subject
1 FAIL
2 FAIL
3 FAIL
4 PASS
5 PASS
6 FAIL
7 PASS
8 FAIL
9 FAIL
The result should be either 3 or 2 depending on how you order ID
You can use the following way. All we need is to count of values changes e.g. where current value not equal the previous. in this example ID is a field for order it can be id,date,....
count(*)+1
because of the first sequence which has no previous value.SQLFiddle demo
If you need to count only sequences with more than 1 values then you can use the following statement. Here
HAVING count(*)>1
means that we need only sequences from 2 or more values in row. If you need 3 or more then change it toHAVING count(*)>2
and so on.SQLFiddle demo
I loaded a SQLfiddle here: http://sqlfiddle.com/#!2/5349a/1 However, in your sample data, you had two ID=5. I made it unique. Also my SQLFiddle data doesn't match yours anymore since I changed some values to make sure it worked. Have fun with it :) (This works looking at the largest ID value for the sequence)
Try this:
It is just a simple trick, if you find the first non-faildata id you can easily count the consecutive passes.