使用Oracle SQL的历史积压

时间:2016-10-05 16:53:42

标签: sql oracle

我正在尝试开发一个查询,该查询将逐月显示我的组织处理的应用程序的历史积压。

我正在查询的表中每行代表一个应用程序。

通过考虑创建应用程序的时间和关闭应用程序的时间,这对于一个月来说相当简单。我可以使用下面的代码。

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)
;

我想做的是创建这样的东西,但按月分组。

即。输出看起来类似于:

  • 1月250日
  • 2月350日
  • 3月290日

等。

就我的目的而言,我将积压定义为当月结束时尚未关闭的任何申请,同时排除在该月结束后开立的任何申请。

我没有运行PL / SQL的权限,但如果这是一个要求,请告诉我。

第一次在这里发帖,所以如果我没有正确解释,请告诉我!

1 个答案:

答案 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之间的每个月获取行,然后计算积压日期对他们来说。