Вот что-то похожее ...
DROP TABLE IF EXISTS absentees;
CREATE TABLE absentees
(employee_id INT NOT NULL
,date DATE NOT NULL
,PRIMARY KEY(employee_id,date)
);
INSERT INTO absentees VALUES
(1,'2017-01-16'),
(1 ,'2017-01-30'),
(1 ,'2017-01-31'),
(1 ,'2017-02-01'),
(1 ,'2017-02-02'),
(1 ,'2017-02-03'),
(1 ,'2017-02-06'),
(1 ,'2017-02-07'),
(1 ,'2017-05-22'),
(2 ,'2016-11-29'),
(2 ,'2016-11-30'),
(2 ,'2016-12-01');
SELECT employee_id
, MIN(date) date
, MAX(i) days
FROM
( SELECT x.*
, CASE WHEN @prev_employee_id = employee_id THEN CASE WHEN @prev_date = date - INTERVAL 1 DAY THEN @i:=@i+1 ELSE @i:=1 END ELSE @i:=1 END i
, CASE WHEN @prev_employee_id = employee_id THEN CASE WHEN @prev_date = date - INTERVAL 1 DAY THEN @j:=@j ELSE @j:=@j+1 END ELSE @j:=1 END j
, @prev_employee_id := employee_id prev_employee_id
, @prev_date := date prev_date
FROM absentees x
JOIN (SELECT @prev_employee_id :='',@prev_date:='',@i:=0,@j:=0) vars
ORDER
BY employee_id
, date
) a
GROUP
BY employee_id
, j
HAVING days >= 3;
+-------------+------------+------+
| employee_id | date | days |
+-------------+------------+------+
| 1 | 2017-01-30 | 5 |
| 2 | 2016-11-29 | 3 |
+-------------+------------+------+