Я бы предложил два отдельных запроса и union
:
select name
from (select name, day,
sum(amount) as total_amount, count(*) as cnt
from table1
group by name, day
) nd join
table2 t2
on t1.cnt >= t2.tranlimperday
union -- on purpose to remove duplicates
select name
from (select name, year(day) as yyyy, month(day) as mm,
sum(amount) as total_amount, count(*) as cnt
from table1
group by name, year(day), month(day)
) nym join
table2 t2
on t1.total_amount >= t2.transamontlim;
В MySQL 8+ вы также можете использовать оконные функции:
select distinct name
from (select name, day,
sum(amount) as daily_total_amount, count(*) as daily_cnt,
sum(sum(amount)) over (partition by name, year(day), month(day)) as monthly_total_amount,
sum(count(*)) over (partition by name, year(day), month(day)) as monthly_cnt
from table1
group by name, day
) nd join
table2 t2
on t1.daily_cnt >= t2.tranlimperday or
t1.monthly_total_amount >= t2.transamontlim;