WITH t AS ( SELECT 111 customer_id, 111 price, '2020-09-15 15:10.10' payment_date UNION ALL SELECT 111, 111, '2020-09-15 15:12.10' UNION ALL SELECT 111, 111, '2020-09-15 15:14.10' UNION ALL SELECT 222, 222, '2020-09-15 15:10.10' UNION ALL SELECT 222, 222, '2020-09-15 15:20.10' UNION ALL SELECT 222, 222, '2020-09-15 15:21.10' UNION ALL SELECT 222, 222, '2020-09-15 15:27.10' UNION ALL SELECT 333, 333, '2020-09-15 15:20.10' UNION ALL SELECT 333, 333, '2020-09-15 15:21.10' UNION ALL SELECT 333, 333, '2020-09-15 15:22.10' UNION ALL SELECT 333, 333, '2020-09-15 15:23.10' UNION ALL SELECT 333, 333, '2020-09-15 15:24.10' ) SELECT a.customer_id, a.price, a.payment_date , COUNT(*) cnt FROM t a INNER JOIN t b ON b.customer_id = a.customer_id AND b.payment_date >= a.payment_date AND b.payment_date <= DATE_ADD(a.payment_date, INTERVAL 5 MINUTE) GROUP BY a.customer_id, a.price, a.payment_date HAVING COUNT(*) >= 3 ;