Oracle 两个字段中6个月期间Q的日期之间的SYSDATE

Oracle 两个字段中6个月期间Q的日期之间的SYSDATE,oracle,Oracle,我试图为两个不同的字段设置过去6个月的日期范围,这两个字段将按月对数据进行分组。我如何设置这样一个中间子句来实现这一点 SELECT TO_CHAR(mopend, 'MM-yyyy') AS month, MOPSTATUS, COUNT(*) MTS_COMPLETE_CNT FROM MOPUSER.MOPACTIVITY WHERE UPPER(MOPSTATUS) = 'COMPLETE' AND TO_CHAR(MOPACTIVITY.MOPSTART, 'yyyy-m

我试图为两个不同的字段设置过去6个月的日期范围,这两个字段将按月对数据进行分组。我如何设置这样一个中间子句来实现这一点

SELECT TO_CHAR(mopend, 'MM-yyyy') AS month, MOPSTATUS, COUNT(*) MTS_COMPLETE_CNT  
FROM MOPUSER.MOPACTIVITY   
WHERE UPPER(MOPSTATUS) = 'COMPLETE'  
AND TO_CHAR(MOPACTIVITY.MOPSTART, 'yyyy-mm-dd hh24:mi') BETWEEN TO_CHAR(sysdate,'YYYY-MM-DD')||' 06:02:00' AND TO_CHAR(sysdate,'YYYY-MM-DD')||' 22:59:59'
OR TO_CHAR(MOPACTIVITY.MOPEND, 'yyyy-mm-dd hh24:mi') BETWEEN TO_CHAR(SYSDATE,'YYYY-MM-DD')||' 06:02:00' AND TO_CHAR(SYSDATE,'YYYY-MM-DD')||' 22:59:59'
GROUP BY TO_CHAR(mopend, 'MM-yyyy'), MOPSTATUS  
ORDER BY TO_CHAR(mopend, 'MM-yyyy'), MOPSTATUS

我会先回答你问题的一部分,然后根据你的评论,我可以给你完整的问题

以下查询返回要搜索的端点。T1是六个月前的早晨06:02。T2是今天的最后一秒

select sysdate
      ,add_months( trunc(sysdate) + interval '06:02'    hour to minute, -6) as t1
      ,            trunc(sysdate) + interval '23:59:59' hour to second      as t2
  from dual;

The above query returns the following (using yyyy-mm-dd hh24:mi:ss):
sydate: 2014-04-11 13:54:28 
t1:     2013-10-11 06:02:00 
t2:     2014-04-11 23:59:59
如果我理解正确,这就是您要搜索的时间段? 对于答案的第二部分,我需要知道以下内容:

  • MOPSTART
    MOPEND
    中的任何一个是否可以为空?如果是,您希望如何处理这些行
  • 是否要包括端点,即MOPSTART>=t1的行?或者仅在MOTSTART>t1的位置
  • 与(2)相同,但适用于MOPEND
  • 您希望按哪个月分组(见下文) 例如,第(a)行,您希望每月计算一次,还是仅在一月(开始)或六月(结束)计算一次

          JAN FEB MAR APR MAY JUN
    a:      |-------------------|
    b:      |---|---|
    c:                      |---|
    d:                      |-----------|
    e:  |--------|