. , , , , : sql fiddle
create table tbl (id int , value float , colrank float );
insert into tbl
values(1,10, 0.52),
(2,11, 0.54),
(3,12, 0.48),
(4,13, 0.49),
(5,17, 0.93),
(6,18, 0.94),
(7,22, 0.96);
WITH CTE AS
( (SELECT TOP 1 *,1 as [rank] from tbl WHERE colrank < 0.95 ORDER BY colrank DESC)
UNION
(SELECT TOP 1 *,2 as [rank] from tbl WHERE colrank > 0.50 ORDER BY colrank ASC)
)
SELECT
b.id, b.value, b.colrank, a.value
FROM
tbl b
LEFT JOIN cte a
ON
(CASE WHEN b.colrank < 0.5 and a.[rank] = 2 THEN 1
WHEN b.colrank > 0.95 and a.[rank] = 1 THEN 1
END) = 1
WHERE a.value IS NOT NULL
select :
WITH CTE AS
( (SELECT TOP 1 *,1 as [rank] from tbl WHERE colrank < 0.95 ORDER BY colrank DESC)
UNION
(SELECT TOP 1 *,2 as [rank] from tbl WHERE colrank > 0.50 ORDER BY colrank ASC)
)
UPDATE b
SET b.value = a.value
FROM
tbl b
LEFT JOIN cte a
ON
(CASE WHEN b.colrank < 0.5 and a.[rank] = 2 THEN 1
WHEN b.colrank > 0.95 and a.[rank] = 1 THEN 1
END) = 1
WHERE a.value IS NOT NULL