我希望在2日期之间每隔7天显示一次记录,如下所示
select *
from user1.report1
where project_name = 'F1'
and TO_DATE(report_date, 'yyyy/mm/dd') >= TO_DATE('2013/1/1', 'yyyy/mm/dd')
and (to_date(report_date,'yyyy/mm/dd') between to_date('2013/1/1','yyyy/mm/dd') + 7
and current_timestamp)
order BY report_date, report_time DESC
通过参考here尝试了这一点,但没有成功
输入: 开始日期(在这种情况下,如上述声明中的2013/1/1)
预期产出: 从开始日期(2013/1/1)到当前日期的记录(1周1记录,如果开始日期是星期一,下一个记录也将是星期一,等等......)
答案 0 :(得分:1)
您可以使用mod函数从给定的开始日期开始每七天获取一次,例如
SELECT *
FROM user1.report1
WHERE project_name = 'F1'
AND to_date(report_date,'yyyy/mm/dd') BETWEEN to_date('2013/01/01','yyyy/mm/dd')
AND sysdate
AND mod(to_date(report_date,'yyyy/mm/dd') - to_date('2013/01/01','yyyy/mm/dd'), 7) = 0
ORDER BY report_date
, report_time DESC
修改强>
以下查询:
WITH report1 AS
(SELECT 'F1' project_name
, to_char(trunc(sysdate) - (level - 1), 'yyyy/mm/dd') report_date
FROM dual
CONNECT BY LEVEL <= 365)
SELECT *
FROM report1
WHERE project_name = 'F1'
AND to_date(report_date,'yyyy/mm/dd') BETWEEN to_date('2014/01/01','yyyy/mm/dd')
AND sysdate
AND mod(to_date(report_date,'yyyy/mm/dd') - to_date('2014/01/01','yyyy/mm/dd'), 7) = 0
ORDER BY report_date
提供以下输出:
PROJECT_NAME REPORT_DATE
------------ -----------
F1 2014/01/01
F1 2014/01/08
F1 2014/01/15
F1 2014/01/22
F1 2014/01/29
F1 2014/02/05
F1 2014/02/12
F1 2014/02/19
F1 2014/02/26
F1 2014/03/05
F1 2014/03/12
F1 2014/03/19
F1 2014/03/26
F1 2014/04/02
F1 2014/04/09
F1 2014/04/16
F1 2014/04/23
F1 2014/04/30
F1 2014/05/07
F1 2014/05/14
F1 2014/05/21
F1 2014/05/28
F1 2014/06/04
F1 2014/06/11
F1 2014/06/18
F1 2014/06/25
F1 2014/07/02
F1 2014/07/09
F1 2014/07/16
F1 2014/07/23
F1 2014/07/30
F1 2014/08/06
F1 2014/08/13
F1 2014/08/20
F1 2014/08/27
F1 2014/09/03
F1 2014/09/10
37 rows selected
即。如果输入过去一年中每天的记录,则输出是从指定的开始日期开始的每周记录,以及与该日期相同的一周。这就是你所要求的。如果不是你想要编辑你的问题,那么给记录形成一个输入,你希望从这个输入得到什么输出;您可能需要用语言解释实现此输出的规则。