Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle BI:Selecione todos os registros da semana passada


É 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:
  1. Truncar sysdate => 2011-04-19 00:00:00
  2. subtrair 14 dias => 2011-04-05 00:00:00
  3. Encontre o próximo domingo => 2011-04-10 00:00:00

...e
  1. Truncar sysdate => 2011-04-19 00:00:00
  2. subtrair 7 dias => 2011-04-12 00:00:00
  3. 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.