2017-09-11 8 views
0

私はCognosで報告するために私が使用している以下のクエリを持っています。月曜日から日曜日までの前週の月曜日に毎週報告しています。選択クエリで前週の日付を取得

現在のところ、この日付はハードコードされていますが、月曜日にこのレポートを実行するたびに前週の日付を変更する必要はありません。

DAY_DATEは、selectクエリでsysdateのようなものを使用して動的にすることはできますか?

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

それが動作https://stackoverflow.com/questions/32584375/oracle-sql-query-get-data-from-last-week-monday-saturday –

答えて

1

あなたはTRUNC (date)機能を使用して、現在の日付から、前の週の開始日と終了日を計算することができます。

たとえば、月曜日2017-09-11、次に金曜日2017-09-15でクエリを実行しており、クエリで前週のレポートが生成されているとします。
このクエリは、現在の週の開始日を計算します。

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 

上記の日付からsubstract 1日、前の週の開始日を計算し、再びTRUCTを使用するには:

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 

だから、あなたのクエリはちょうどこの句を使用して(前の週の開始と<よりも日付を> =現在の週の開始):

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

感謝を参照してください。 – Andrew

関連する問題