2017-09-11 1 views
0

Ich habe unter Abfrage, die ich für die Berichterstattung in Cognos verwenden. Ich berichte jede Woche am Montag für die letzte Woche von Montag bis Sonntag.vorherige Woche Datum in ausgewählte Abfrage

Derzeit ist dieses Datum fest codiert, aber ich möchte es dynamisch machen, so dass ich jedes Mal, wenn ich diesen Bericht am Montag ausführen muss, das Datum für die vorherige Woche nicht ändern muss.

Ist es möglich, dass ich DAY_DATE dynamisch mit etwas wie Sysdate in Select Query machen kann?

select ID,NAME,DAY_DATE  
from TEST_REPORT 
WHERE DAY_DATE BETWEEN to_date ('20170904', 'YYYYMMDD') and to_date ('20170910', 'YYYYMMDD'); 
+0

Siehe https://stackoverflow.com/questions/32584375/oracle-sql-query-get-data-from-last-week-monday-saturday –

Antwort

1

Sie können Start- und Enddatum der vergangenen Woche vom aktuellen Datum TRUNC (date) Funktion berechnen.

Nehmen wir an, Sie führen die Abfrage am Montag 2017-09-11, dann am Freitag 2017-09-15, und die Abfrage muss immer einen Bericht für die vorherige Woche generieren.
Diese Abfrage berechnet einen Startdatum der aktuellen Woche:

SELECT trunc(date '2017-09-11', 'IW') as x, 
     trunc(date '2017-09-15', 'IW') as y 
from dual; 

X    Y    
---------------- ---------------- 
2017/09/11 00:00 2017/09/11 00:00 

Um ein Startdatum der letzten Woche, subtrahiert 1 Tag aus den obigen Daten zu berechnen, und TRUCT wieder verwenden:

SELECT trunc(trunc(date '2017-09-11', 'IW') - 1, 'IW') as start_last_week, 
     trunc(trunc(date '2017-09-15', 'IW') - 1, 'IW') as start_last_week1 
from dual; 

START_LAST_WEEK START_LAST_WEEK1 
---------------- ---------------- 
2017/09/04 00:00 2017/09/04 00:00 

Also, in Ihrer Abfrage verwendet nur diese Klausel (Datum> = als ein Beginn der vergangenen Woche und <, dass ein Beginn der aktuellen Woche):

WHERE DAY_DATE>= trunc(trunc(sysdate, 'IW') - 1, 'IW') 
    and DAY_DATE < trunc(sysdate, 'IW') 
+0

Dank es funktioniert – Andrew

Verwandte Themen