É possível determinar as datas desejadas usando combinações de próximo_dia e aritmética de data regular. O código abaixo deve estar bem próximo, mas não foi testado e provavelmente falha em algum caso de canto, mas pelo menos você tem a ideia geral :)
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 a data para o dia; 2011-04-19 23:32:34 torna-se 2011-04-19 00:00:00, ou seja, removendo o componente de hora.next_day(sysdate, 'SUN')
retorna no próximo domingo. Se sysdate for um domingo, o próximo domingo será retornado.Importante :os nomes dos dias devem estar no mesmo idioma da sua sessão.
O
interval
coisa é apenas uma maneira padrão de adicionar/subtrair diferentes unidades de tempo de uma data. Juntando tudo, a lógica para o dia 19 de abril de 2011 seria:
- Truncar sysdate => 2011-04-19 00:00:00
- subtrair 14 dias => 2011-04-05 00:00:00
- Encontre o próximo domingo => 2011-04-10 00:00:00
...e
- Truncar sysdate => 2011-04-19 00:00:00
- subtrair 7 dias => 2011-04-12 00:00:00
- Encontre o próximo domingo => 2011-04-17 00:00:00
..resultando na seguinte consulta:
where resolved_date >= timestamp '2011-04-10 00:00:00'
and resolved_date < timestamp '2011-04-17 00:00:00'
Todas as datas_resolvidas que aconteceram no ou após o primeiro segundo do dia 10, mas antes do primeiro segundo do dia 17, serão incluídas. Observe que
>=
e <
não é equivalente a between
. Uma observação sobre o desempenho:eu me certificaria de que a Oracle estimasse corretamente o intervalo de datas em 7 dias e que a ordem/método de junção correto fosse usado. Se você espera que a consulta seja executada por um tempo, você pode calcular as datas no aplicativo e fornecê-las como datas literais em vez de calculá-las rapidamente como fiz acima.