I am using this
round(b.SOFAR*100 / b.TOTALWORK,0) || '%' as "%DONE",b.TIME_REMAINING,to_char(b.start_time,'YYYY/MM/DD HH24:MI:SS') START_TIME
from V$SESSION_LONGOPS b,GV$SESSION g
and TIME_REMAINING <> 0 order by b.SOFAR/b.TOTALWORK;
But it's not given all the select statement
Longops only gives you sessions which have a step in the plan which is running long (hence the name). So for example, if you have a step in the plan which is a full table scan and that has been running for 20 seconds and has (approx) 10 second remaining, you will see that step in longops, however you won't see statements which are running slow because they're doing something many times (i.e. a 1ms index access being done a million times will be slow, but as each step only takes 1ms you don't see it in longops).
Other than the long steps in longops, there isn't really anything which is going to tell you "this is the time left on my sql statement" - because all manner of things can happen. Plus it's set based processing - not linear.
You can utilze v$active_session_history to see where a statement is up to in the plan, however that is just timed snapshots of what the session is doing - not what it has left to do etc.