Sql 在选择查询中获取上一周的日期

Sql 在选择查询中获取上一周的日期,sql,oracle,date,select,difference-between-rows,Sql,Oracle,Date,Select,Difference Between Rows,下面是我在Cognos中用于报告的查询。从星期一到星期天,我每周都在周一做报告 目前,这个日期是硬编码的,但我想让它成为动态的,这样每当我在周一运行这个报告时,我就不必更改前一周的日期 我是否可以在select查询中使用类似sysdate的东西使DAY\u DATE动态化 select ID,NAME,DAY_DATE from TEST_REPORT WHERE DAY_DATE BETWEEN to_date ('20170904', 'YYYYMMDD') and to_da

下面是我在Cognos中用于报告的查询。从星期一到星期天,我每周都在周一做报告

目前,这个日期是硬编码的,但我想让它成为动态的,这样每当我在周一运行这个报告时,我就不必更改前一周的日期

我是否可以在select查询中使用类似sysdate的东西使
DAY\u DATE
动态化

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

您可以使用函数从当前日期计算上一周的开始和结束日期。

假设您在星期一
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
WHERE DAY_DATE>= trunc( trunc( sysdate, 'IW' )  - 1, 'IW') 
  and DAY_DATE < trunc( sysdate, 'IW' )

要计算前一周的开始日期,请从上述日期中减去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

因此,在您的查询中,只需使用以下子句(date>=上一周的开始和<上一周的开始):

其中DAY\u DATE>=trunc(trunc(sysdate,'IW')-1,'IW'))
和日期
请参阅