Предполагая, что даты не имеют дубликатов, вы можете использовать lag()
:
select t.*
from (select t.*,
lag(date) over (order by date) as prev_date,
lag(date) over (partition by title, sku, price, media, url order by date) as prev_date2
from t
) t
where prev_date is null or prev_date <> prev_date2;
РЕДАКТИРОВАТЬ:
Предполагая, что даты являются уникальными, вы можете использовать следующую логику c:
with todelete as (
select t.*
from (select t.*,
lag(date) over (order by date) as prev_date,
lag(date) over (partition by title, sku, price, media, url order by date) as prev_date2
from t
) t
where prev_date is null or prev_date <> prev_date2
)
delete from t
where t.date in (select cte.date from cte);