На основе ваших входных данных вы можете сделать:
select i.*
from input i
where i.prv < i.cur;
В более общем случае, если у вас нет дубликатов для всех пар:
select i.*
from input i
where i.prv < i.cur
union all
select i.*
from input i
where i.prv > i.cur and
not exists (select 1
from input i2
where i2.prv = i.cur and
i2.cur = i.prv and
i2.start_dt = i.start_dt
);
Или вы можете использовать row_number()
:
select i.*
from (select i.*
row_number() over (partition by start_dt, least(prv, cur), greatest(prv, cur) order by start_dt) as seqnum
from input i
) i
where seqnum = 1;
Это может быть самый эффективный метод в Hive.