Filter SQL query by string and date range

I have a time-indexed Oracle DB that I am trying to query by a date range. I also want to reduce data in the query so as not to overload too much data.

Offline date request (2352 lines in 0.203s):

select oracle_time from t_ssv_soh_packets0
where oracle_time >= TIMESTAMP '2009-01-01 00:00:00' 
AND oracle_time <= TIMESTAMP '2009-01-31 00:00:00' 

Recovery request booth (1017 in 0.89 sec.):

select oracle_time from t_ssv_soh_packets0
where (rowid,0) in (select rowid, mod(rownum,50) from t_ssv_soh_packets0)

When I try to combine them, it takes forever (48 lines in 32.547):

select oracle_time from t_ssv_soh_packets0
where oracle_time >= TIMESTAMP '2009-01-01 00:00:00' 
AND oracle_time <= TIMESTAMP '2009-01-31 00:00:00' 
AND (rowid,0) in (select rowid, mod(rownum,50) from t_ssv_soh_packets0)

Obviously, I'm doing something fundamentally wrong here, but I don’t know how else to execute the query by date and reduce the data.

+3
source share
4 answers

"Narveson" "nate c" , , . (, Oracle), :

select oracle_time from t_ssv_soh_packets0 where oracle_time >= TIMESTAMP '2009-01-01 00:00:00' AND oracle_time <= TIMESTAMP '2009-01-31 00:00:00' group by oracle_time, rownum having mod(rownum, 50)=0

47 0.031s. 2352 , .

ORAFAQ .

0

, .

, .

: .

select oracle_time from (
  select oracle_time, rownum as limited_row_num
  from t_ssv_soh_packets0 
  where oracle_time >= TIMESTAMP '2009-01-01 00:00:00'  
  AND oracle_time <= TIMESTAMP '2009-01-31 00:00:00'  
) as time_range
where mod(limited_row_num,50) =  0
+2

in

?:

select oracle_time from t_ssv_soh_packets0
where (rowid,0) in (select rowid, mod(rownum,50) from t_ssv_soh_packets0)

- mod (rownum, 50)

select * from t where mod(rownum, 50)=0

AND mod(rownnum,50)=0 in.

+1

Oracle , SAMPLE():

SELECT oracle_time 
FROM t_ssv_soh_packets0
WHERE ...
SAMPLE(50)

Randomly returns 50% percent of rows

+1
source

Source: https://habr.com/ru/post/1780322/


All Articles