SELECT player_id, MAX(player_tag) AS tag, COUNT(*) AS streak, MIN(match_id) AS match_id, MIN(date) AS first_date, MAX(date) AS last_date, MAX(date)-MIN(date) AS duration, AVG(m.opponent_position)::integer AS avg_opp_pos, AVG(m.opponent_rating)::integer AS avg_opp_rating, ROUND(AVG(m.opponent_score),2) AS avg_opp_score, ROUND((COUNT(*) FILTER (WHERE m.offline='true'))::decimal/COUNT(*),2) AS perc_off FROM ( SELECT m.*, COUNT(*) FILTER (WHERE win='false') OVER (PARTITION BY player_id ORDER BY date, match_id) AS streak_grp FROM matches_m m WHERE m.opponent_position<'100' AND m.event_name ILIKE '%%' ) AS m WHERE win='true' GROUP BY player_id, streak_grp ORDER BY streak DESC LIMIT 100