Вы можете использовать:
delete from matches where id not in (...)
, но вы должны вложить свой запрос на один уровень глубже, например:
delete from matches
where id not in (
select id from (
select min(id) id from matches
where (stream_match_time, track_match_time, juked_user_id, track_id ) in (
select stream_match_time, track_match_time, juked_user_id, track_id
from matches
group by stream_match_time, track_match_time, juked_user_id, track_id
having count(*) > 1
)
group by stream_match_time, track_match_time, juked_user_id, track_id
) t
)
Я думаю, что ваш запрос не нуждается в 2 уровнях агрегирования, так попробуйте также это:
delete from matches
where id not in (
select id from (
select min(id) id
from matches
group by stream_match_time, track_match_time, juked_user_id, track_id
having count(*) > 1
) t
)