Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle BI:seleziona tutti i record della scorsa settimana

È possibile determinare le date desiderate utilizzando combinazioni di giorno_prossimo e aritmetica della data regolare. Sotto il codice dovrebbe essere abbastanza vicino, ma non è testato e probabilmente fallisce in qualche caso d'angolo, ma almeno hai un'idea generale :)

where resolved_date >= next_day( trunc(sysdate) - interval '14' day, 'SUN')
  and resolved_date <  next_day( trunc(sysdate) - interval '7'  day, 'SUN')

trunc(sysdate) troncare la data al giorno; 2011-04-19 23:32:34 diventa 2011-04-19 00:00:00, ovvero rimuovendo il componente ora.next_day(sysdate, 'SUN') ritorna la domenica successiva. Se sysdate è domenica, viene restituita la domenica successiva.
Importante :I nomi dei giorni devono essere nella stessa lingua della tua sessione.
L' interval la cosa è solo un modo standard per aggiungere/sottrarre diverse unità di tempo da una data.

Mettendo tutto insieme, la logica per il 19 aprile 2011 sarebbe:

  1. Tronca data di sistema => 19-04-2011 00:00:00
  2. sottrai 14 giorni => 05-04-2011 00:00:00
  3. Trova la prossima domenica => 2011-04-10 00:00:00

...e

  1. Tronca data di sistema => 19-04-2011 00:00:00
  2. sottrai 7 giorni => 2011-04-12 00:00:00
  3. Trova la prossima domenica => 2011-04-17 00:00:00

..con conseguente interrogazione:

 where resolved_date >= timestamp '2011-04-10 00:00:00'
   and resolved_date <  timestamp '2011-04-17 00:00:00'

Verrebbero incluse tutte le date_risolte che si sono verificate il o dopo il primo secondo del 10:esimo ma prima del primo secondo del 17:esimo. Nota che >= e < non è equivalente a between .

Una nota sulle prestazioni:mi assicurerei che Oracle stimi correttamente l'intervallo di date in 7 giorni e che venga utilizzato l'ordine/metodo di unione corretto. Se prevedi che la query venga eseguita per un po', puoi permetterti di calcolare le date nell'applicazione e fornirle come valori letterali invece di calcolarle al volo come ho fatto sopra.