我正在尝试开发一个查询,该查询将逐月显示我的组织处理的应用程序的历史积压。
我正在查询的表中每行代表一个应用程序。
通过考虑创建应用程序的时间和关闭应用程序的时间,这对于一个月来说相当简单。我可以使用下面的代码。
SELECT COUNT(*)
FROM APPLICATIONS
WHERE TRUNC(CRTE_DTE,'mm') <= TO_DATE('09/01/2016','mm/dd/yyyy')
AND (TRUNC(CLOS_DTE,'mm')> TO_DATE('09/01/2016','mm/dd/yyyy') OR CLOS_DTE IS
NULL)
;
我想做的是创建这样的东西,但按月分组。
即。输出看起来类似于:
等。
就我的目的而言,我将积压定义为当月结束时尚未关闭的任何申请,同时排除在该月结束后开立的任何申请。
我没有运行PL / SQL的权限,但如果这是一个要求,请告诉我。
第一次在这里发帖,所以如果我没有正确解释,请告诉我!
答案 0 :(得分:1)
尝试这样的事情:
SELECT d.dt, COUNT(*)
FROM
APPLICATIONS a,
(SELECT ADD_MONTHS(:DATE1, ROWNUM-1) DT FROM DUAL CONNECT BY ROWNUM<=MONTHS_BETWEEN(:DATE2, :DATE1)+1) d
WHERE TRUNC(a.CRTE_DTE,'mm') <= d.dt
AND (TRUNC(a.CLOS_DTE,'mm')> d.dt OR CLOS_DTE IS NULL)
GROUP BY D.DT
:date1 - 开始日期,例如08/01/2016,:date2 - 结束日期,例如10/01/2016,在子查询中,我们在:date1和:date2之间的每个月获取行,然后计算积压日期对他们来说。