Если вы хотите, чтобы ваш промежуточный итог был для каждой группы и для каждого импа, вы должны также включить это в ваше объединение:
Select t1.Date, t1.Group, t1.Imp, Sum(t2.Cost) as RunTotal
From datatable t1
Inner Join datatable t2 on t1.Group = t2.Group and t1.Imp = t2.Imp and t1.Date >= t2.Date
WHERE t1.Boolean=TRUE
GROUP BY t1.Date, t1.Group, t1.Imp
Прямо сейчас вы объединяетесь со всеми записями, где t1.Date> = t2.Date, что включает в себя записи для несоответствующей группы / импа. Просто запустите следующее:
Select t1.Date, t1.Group, t1.Imp, t2.Date, t2.Group, t2.Imp, t2.Cost
From datatable t1
Inner Join datatable t2 on t1.Date >= t2.Date
WHERE t1.Boolean=TRUE
Вы должны увидеть записи t2.Cost, которые вам не нужны в вашей сумме.