sql >> Databáze >  >> RDS >> Oracle

Oracle BI:Vyberte všechny záznamy z minulého týdne

Je možné určit data, která chcete, pomocí kombinací další_den a aritmetika běžného data. Níže uvedený kód by měl být docela blízko, ale není otestován a pravděpodobně selže na nějakém rohovém pouzdru, ale alespoň máte obecnou představu :)

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

trunc(sysdate) zkrátit datum na den; 2011-04-19 23:32:34 se změní na 2011-04-19 00:00:00, tj. odstraní časovou složku.next_day(sysdate, 'SUN') se vrací příští neděli. Pokud je sysdate náhodou neděle, vrátí se další neděle.
Důležité :Názvy dnů musí být ve stejném jazyce jako vaše relace.
interval věc je jen standardní způsob přidávání/odečítání různých jednotek času od data.

Když to dáme dohromady, logika pro 19. dubna 2011 by byla:

  1. Zkrátit sysdate => 2011-04-19 00:00:00
  2. odečíst 14 dní => 2011-04-05 00:00:00
  3. Najít další neděli => 2011-04-10 00:00:00

...a

  1. Zkrátit sysdate => 2011-04-19 00:00:00
  2. odečíst 7 dní => 2011-04-12 00:00:00
  3. Najít další neděli => 2011-04-17 00:00:00

..výsledkem je následující dotaz:

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

Budou zahrnuta všechna vyřešená_data, která se stala první sekundou 10. dne nebo po něm, ale před první sekundou 17. dne. Všimněte si, že >= a < není ekvivalentní between .

Poznámka k výkonu:Ujistil bych se, že Oracle správně odhadne rozsah dat na 7 dní a že bude použita správná objednávka/metoda spojení. Pokud očekáváte, že dotaz bude nějakou dobu běžet, můžete si dovolit vypočítat data v aplikaci a dodat je jako datové litterály místo toho, abyste je počítal za chodu, jako jsem to dělal výše.



  1. Jak make_date() funguje v PostgreSQL

  2. Django migrace – je možné použít jih uprostřed projektu?

  3. MySQL Multi-Delete. Je možné vícenásobně odstranit odkazované řádky?

  4. Jak vypočítat časový rozdíl s plánem pracujícím se dvěma časovými razítky?