Per Team - Count Number of Losses in Last N Results
This should do the trick:

select team_id, count(*) from (
    select *, case when @team = team_id then @i:=@i+1 else @i:=0 END as n, @team:=team_id 
    from team_results, (select @i:=0, @team_id:=0) init
    order by team_id, result_date desc
) a
where a.n &lt; 10 and won = 0
group by team_id;


You use the inner query to enumerate the results by date. Here you probably want to apply some heuristic where condition to filter the results to optimize your query. For example if they in average play every second day then you can limit for the last one month or so.

Then you can count the lost games with the given conditions per team.

@update to show teams with 0 loss

select team_id, sum(1 - won) -- instead of count rows sum losses (1-won) = loss
from (
    select *, case when @team = team_id then @i:=@i+1 else @i:=0 END as n, @team:=team_id 
    from team_results, (select @i:=0, @team_id:=0) init
    order by team_id, result_date desc
) a
where a.n &lt; 10  -- remove the won=0 filter 
group by team_id;