Вам нужна другая переменная, чтобы запомнить страховой статус:
SELECT t.insurance_status, t.day, t.vendor_count,
(@sum := if(@is = t.insurance_status, @sum + t.vendor_count,
if(@is := t.insurance_status, t.vendor_count, t.vendor_count
)
)
) AS cumulative_sum
FROM (SELECT insurance_status,
DATE_FORMAT(date, '%Y %m') as day,
count(insurance_status) as vendor_count
FROM vendor_report_jll
WHERE project_id in (100, 92, 45, 91, 86, 87, 88, 40, 101, 90, 98)
GROUP BY insurance_status, day
ORDER BY insurance_status, day -- just being explicit
) t CROSS JOIN
(SELECT @sum := 0, @is := -1) params;
Вы должны выполнить все задания в одном выражении. Это связано с правилами MySQL - он не гарантирует порядок вычисления выражений в SELECT
, поэтому вы не можете назначать переменные в одном выражении и использовать их в другом.