sql >> Base de Datos >  >> RDS >> Oracle

Oracle BI:seleccione todos los registros de la semana pasada

Es posible determinar las fechas que desea mediante combinaciones de próximo_día y aritmética de fechas regulares. El siguiente código debería estar bastante cerca, pero no está probado y probablemente falla en algún caso de esquina, pero al menos tienes una idea general :)

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

trunc(sysdate) truncar la fecha al día; 2011-04-19 23:32:34 se convierte en 2011-04-19 00:00:00, es decir, se elimina el componente de hora.next_day(sysdate, 'SUN') regresa el próximo domingo. Si sysdate resulta ser un domingo, se devuelve el siguiente domingo.
Importante :Los nombres de los días deben estar en el mismo idioma que su sesión.
El interval La cosa es solo una forma estándar de sumar/restar diferentes unidades de tiempo de una fecha.

Poniéndolo todo junto, la lógica para el 19 de abril de 2011 sería:

  1. Truncar sysdate => 2011-04-19 00:00:00
  2. restar 14 días => 2011-04-05 00:00:00
  3. Buscar el próximo domingo => 2011-04-10 00:00:00

...y

  1. Truncar sysdate => 2011-04-19 00:00:00
  2. restar 7 días => 2011-04-12 00:00:00
  3. Buscar el próximo domingo => 2011-04-17 00:00:00

..dando como resultado la siguiente consulta:

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

Se incluirían todas las fechas_resueltas que sucedieron a partir del primer segundo del día 10 pero antes del primer segundo del 17. Tenga en cuenta que >= y < no es equivalente a between .

Una nota sobre el rendimiento:me aseguraría de que Oracle estime correctamente el rango de fechas en 7 días y que se use el orden/método de unión correcto. Si espera que la consulta se ejecute durante un tiempo, puede darse el lujo de calcular las fechas en la aplicación y proporcionarlas como literales de fecha en lugar de calcularlas sobre la marcha como hice anteriormente.