oracle使用connect by子句在日期范围之间选择数据

时间:2015-02-19 06:29:43

标签: sql oracle oracle11g

我有类似这样的数据

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

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

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

1 个答案:

答案 0 :(得分:2)

您根本不需要使用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变量插入正确的值。