Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle BI :sélectionnez tous les enregistrements de la semaine dernière

Il est possible de déterminer les dates souhaitées en utilisant des combinaisons de jour_suivant et l'arithmétique régulière des dates. Le code ci-dessous devrait être assez proche, mais il n'a pas été testé et échoue probablement dans certains cas particuliers, mais au moins vous avez l'idée générale :)

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

trunc(sysdate) tronquer la date à jour ; 2011-04-19 23:32:34 devient 2011-04-19 00:00:00, c'est-à-dire en supprimant le composant horaire.next_day(sysdate, 'SUN') revient le dimanche suivant. Si la date système est un dimanche, le dimanche suivant est renvoyé.
Important :Les noms des jours doivent être dans la même langue que votre session.
L'interval chose est juste un moyen standard d'ajouter/soustraire différentes unités de temps à partir d'une date.

En mettant tout cela ensemble, la logique pour le 19 avril 2011 serait :

  1. Tronquer la date système => 2011-04-19 00:00:00
  2. soustraire 14 jours => 2011-04-05 00:00:00
  3. Rechercher le dimanche suivant => 2011-04-10 00:00:00

...et

  1. Tronquer la date système => 2011-04-19 00:00:00
  2. soustraire 7 jours => 2011-04-12 00:00:00
  3. Rechercher le dimanche suivant => 2011-04-17 00:00:00

..résultant de la requête suivante :

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

Toutes les dates_résolues qui se sont produites le ou après la première seconde du 10 :th mais avant la première seconde du 17 :th seraient incluses. Notez que >= et < n'est pas équivalent à between .

Une note sur les performances :je m'assurerais qu'Oracle estime correctement la plage de dates à 7 jours et que l'ordre/la méthode de jointure correct(e) est utilisé(e). Si vous vous attendez à ce que la requête s'exécute pendant un certain temps, vous pouvez vous permettre de calculer les dates dans l'application et de les fournir sous forme de littéraux de date au lieu de les calculer à la volée comme je l'ai fait ci-dessus.