Where 子句,输出过去一年中每个月的第一个月



我正在从数据库中提取,我需要去年每个月第一天。这是针对每月运行的报告,因此我不想创建一个数组,然后必须每月更新该数组。到目前为止,我已经把它输出到本月第一天的位置:

SELECT
SCART.STA_FRAME_STAT.ARRAY,
SCART.STA_FRAME_STAT.S_DATE
FROM
SCART.STA_FRAME_STAT
WHERE
(SCART.STA_FRAME_STAT.S_DATE) = (trunc(sysdate) - (to_number(to_char(sysdate,'DD')) -1 ))

其中,其输出显示:

Array    S_DATE
1        5/1/2018
2        5/1/2018
.        .
.        .
.        .

关于我如何将其一直追溯到5/1/2017而仅输出本月的第一天的任何指导,以便我可以保持我的尺寸,将不胜感激。顺便说一下,我在蟾蜍工作。

我以不同的方式处理这个问题。如果有人需要帮助,这是解决方案:

SELECT
SCART.STA_FRAME_STAT.ARRAY,
SCART.STA_FRAME_STAT.S_DATE

FROM
SCART.STA_FRAME_STAT
WHERE
to_char(SCART.STA_FRAME_STAT.S_DATE,'DD') = 01
AND 
to_char(SCART.STA_FRAME_STAT.S_DATE,'YYYY') >= 2017

这是一种使用递归 with 子句的方法。这将生成从当前月份起 12 个月的每个月的第一天。

with dates(r) as
(select 0 r from dual
union all
select r+1 from dates
where r < 12)
select r,
trunc(add_months(sysdate,-1*r), 'MM') S_DATE
from dates

我的输出是:

r   S_DATE
0   01-MAY-18
1   01-APR-18
2   01-MAR-18
3   01-FEB-18
4   01-JAN-18
5   01-DEC-17
6   01-NOV-17
7   01-OCT-17
8   01-SEP-17
9   01-AUG-17
10  01-JUL-17
11  01-JUN-17
12  01-MAY-17

最新更新