数据库如下:
表:plan
记录:
planname    startdate    enddate
安排一        2008-10-5    2008-10-7
安排二        2008-10-6    2008-10-8
安排三        2008-9-10    2008-11-12
安排四        2008-9-20    2008-10-15现在想通过SQL语句来取得有10月份有安排的日子以及安排数量
目前是用了个数组来记录,感觉不太方便,请教

解决方案 »

  1.   

    SELECT DD, COUNT(DD) 当天安排数量
      FROM (SELECT PLANNAME, STARTDATE, ENDDATE, STARTDATE + R DD
              FROM plan,
                   (SELECT ROWNUM - 1 R
                      FROM DUAL, (SELECT MAX(ENDDATE - STARTDATE) + 1 M FROM plan) M
                    CONNECT BY ROWNUM <= M.M)
             WHERE ENDDATE - STARTDATE >= R
             ORDER BY 1, 4)
     WHERE TRUNC(DD, 'mm') = TO_DATE('2008-10-01', 'yyyy-mm-dd')
     GROUP BY DD
     ORDER BY 1;
    输出:
    DD  当天安排数量
    2008-10-01 2
    2008-10-02 2
    2008-10-03 2
    2008-10-04 2
    2008-10-05 3
    2008-10-06 4
    2008-10-07 4
    2008-10-08 3
    2008-10-09 2
    2008-10-10 2
    2008-10-11 2
    2008-10-12 2
    2008-10-13 2
    2008-10-14 2
    2008-10-15 2
    2008-10-16 1
    2008-10-17 1
    2008-10-18 1
    2008-10-19 1
    2008-10-20 1
    2008-10-21 1
    2008-10-22 1
    2008-10-23 1
    2008-10-24 1
    2008-10-25 1
    2008-10-26 1
    2008-10-27 1
    2008-10-28 1
    2008-10-29 1
    2008-10-30 1
    2008-10-31 1
      

  2.   

    用CONNECT BY先拼出这个月里所有的天数,然后再统计月数量+左连接就行。