You can first select the minimum and maximum dates, and then perform a comparison:
with cte as(select *,
min(ActualReadingDate) over(partition by meterid) as MinDate,
max(ActualReadingDate) over(partition by meterid) as MaxDate
from meterreadings)
delete from cte
where ScheduledReadingDate not between MinDate and MaxDate
source
share