SELECT *
FROM table t1
WHERE EXISTS (
SELECT 1
FROM table t2
WHERE t1.name = t2.name
AND t2.transaction_date BETWEEN t1.transaction_date AND DATE_ADD(t1.transaction_date, INTERVAL 2 MONTH)
GROUP BY t2.name
HAVING COUNT(DISTINCT DATE_FORMAT(t2.transaction_date, '%Y-%m')) >= 3
);