あなたの本能は、イベントがゼロの行を見て、それらを処理するのに適しています。ウィンドウ関数でサブクエリを使用して、ゼロイベント日の間の「ギャップ」を取得し、その外部のクエリで、次のように必要なレコードを取得できます。
select *
from (
select date as day_after_streak
, lag(date) over(order by date asc) as previous_zero_date
, date - lag(date) over(order by date asc) as difference
, date_part('days', date - lag(date) over(order by date asc) ) - 1 as streak_in_days
from dates
group by date
having sum(events) = 0 ) t
where t.streak_in_days is not null
order by t.streak_in_days desc
limit 1