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:
- Truncar sysdate => 2011-04-19 00:00:00
- restar 14 días => 2011-04-05 00:00:00
- Buscar el próximo domingo => 2011-04-10 00:00:00
...y
- Truncar sysdate => 2011-04-19 00:00:00
- restar 7 días => 2011-04-12 00:00:00
- 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.