Вы можете использовать оконные функции:
with cte as (
select
t.*,
min(checkin) over(partition by refno) min_checkin,
max(checkout) over(partition by refno) max_checkout
from mytable t
)
update cte
set checkin = min_checkin, checkout = max_checkout
where ccdate between min_checkin and max_checkout
Обратите внимание, что это неявно предполагает, что у каждого refno
есть только одно значение checkin
и checkout
.