我写的有点繁,并且把你的'now'改成sysdate了,不过貌似还可以用,如果你的rn只有1,2两级的话。
with ta as (select saleno,old_md,separate_time,rn from tts union
select saleno,new_md,separate_time,rn+1 rn from tts)
select saleno,old_md md,min(s)startt,max(e)endd from
(select saleno,
old_md,
decode(rn,1,to_date('19000101','yyyymmdd'),2,lag(separate_time)over(partition by saleno order by rn),3,separate_time) s,
decode(rn,1,separate_time,2,lead(separate_time)over(partition by saleno order by rn),3,sysdate) e,rn from ta) group by saleno,old_md
|