Mysql consecutive days user wise

gaps-and-islandsMySQL

Table 'present'

+--------+------------+
| emp_id | pre_date   |
+-----------+---------+
| 002    | 2019-04-01 |
| 001    | 2019-04-21 |
| 001    | 2019-04-15 |
| 001    | 2019-04-19 |
| 002    | 2019-04-15 |
| 002    | 2019-04-16 |
| 002    | 2019-04-10 |
| 001    | 2019-04-10 |
| 001    | 2019-04-20 |
| 002    | 2019-04-19 |
| 001    | 2019-04-01 |
| 001    | 2019-04-30 |
| 002    | 2019-04-21 |
| 002    | 2019-04-24 |
| 001    | 2019-04-16 |
| 002    | 2019-04-20 |
| 001    | 2019-04-24 |
+-----------+---------+

I want result

+--------+------------+
| emp_id | count      |
+-----------+---------+
| 001    |3           |
+-----------+---------+

Because Emp 001 present 2019-04-19, 2019-04-20, 2019-04-21 that 3 consecutive days

Best Answer

Simplest way to use sub query.

SELECT emp_id,count(*) as count FROM ( SELECT *, count(p.id) FROM present p GROUP BY pre_date , emp_id ) d group by d.emp_id