Вы можете использовать оконные функции. Для числового значения c:
select avg(col)
from (select t.*
row_number() over (order by col) as seqnum,
count(*) over () as cnt
from t
) t
where seqnum in ( cnt / 2, (cnt + 1) / 2, (cnt + 2) / 2);
Для строки или даты сложнее использовать интерполяцию, поэтому я просто рекомендую:
select col
from (select t.*
row_number() over (order by col) as seqnum,
count(*) over () as cnt
from t
) t
where seqnum in ( cnt / 2, (cnt + 1) / 2);