oracle select 使用 connect by 子句的日期范围之间的数据

oracle select data between date range using connect by clause

我有这样的数据

date        count
01-JAN-2015 10
02-JAN-2015 20
03-JAN-2015 30
01-FEB-2015 4
02-FEB-2015 8
03-FEB-2015 12
01-MAR-2015 5
02-MAR-2015 10
03-MAR-2015 15
01-APR-2015 6    
02-APR-2015 12
03-APR-2015 18
01-MAY-2015 7    
02-MAY-2015 14
03-MAY-2015 21
01-JUN-2015 8   
02-JUN-2015 16
03-JUN-2015 24
01-JUL-2015 8   
02-JUL-2015 16
03-JUL-2015 24

我需要按月份分组的结果,从当前月份开始有可变的月份数

示例如果我只需要从今天起接下来的 2 个月,结果是

MAR-2015  24
APR-2015  36

如果我只需要从今天起接下来的 3 个月,结果是

MAR-2015  24
APR-2015  36
MAY-2015  42

我要查询具有月份开始日期和结束日期的变量月份

SELECT TO_CHAR(TRUNC(ADD_MONTHS(sysdate,level),'MM'),'MON-yyyy') MNTH ,
  TO_CHAR(TRUNC(ADD_MONTHS(sysdate,level),'MM'),'dd-MON-yyyy') strt_date,
  TO_CHAR(TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE, level))),'dd-MON-yyyy') end_date
FROM dual
  CONNECT BY LEVEL <= p_level

其中 p_level 是可变的月数,例如 2,3,4....

任何 1 可以帮助使用 SQL 查询而不使用 PL/SQL

您根本不需要使用 connect by 子句。

select   to_char(trunc(t.date, 'mm'), 'MON-YY')
,        count(1)
from     your_table_here t
where    trunc(t.date, 'mm') > sysdate
and      trunc(t.date, 'mm') < add_months(sysdate, :months)
group by trunc(t.date, 'mm')

只需为 :months 变量插入正确的值。