如何为故障单生成每天的积压

时间:2015-09-28 07:22:49

标签: oracle stored-procedures oracle11g

您好我正在尝试创建一个计算每天积压的程序。

例如:我在12-sep-2015上有一张ticket_submitdate的票,在一张表中有一张15-sep-2015的resolved_date。此票证应作为backlog_table的待办事项,因为它在ticket_submitdate的同一天未得到解决。

我在date_col中有另一列backlog_table,其中显示了故障单作为积压的日期,即它应该在ticket_backlog表中的日期13- sep-2015和14-sep-2015以及date_col列应该包含这两个日期的票证。

请帮忙。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

我不确定我理解你的问题,如果你正在寻找两个日期范围之间的所有日期,那么你可以使用以下查询 -

select trunc(date_col2+lv) from
  (select level lv from dual connect by level < (date_col1-date_col2-1) )
order by 1

答案 1 :(得分:0)

以下是一些测试数据:

create table backlog (ticket_no number, submit_date date, resolved_date date);

insert into backlog values (100, date '2015-09-12', date '2015-09-15');
insert into backlog values (200, date '2015-09-12', date '2015-09-14');
insert into backlog values (300, date '2015-09-13', date '2015-09-15');
insert into backlog values (400, date '2015-09-13', date '2015-09-16');
insert into backlog values (500, date '2015-09-13', date '2015-09-13');

此查询生成一个跨越BACKLOG记录范围的日期列表,并将它们连接到BACKLOG。

with dt as ( select min(submit_date) as st_dt
                   , greatest(max(resolved_date), max(submit_date)) as end_dt
            from backlog)
    , dt_range as ( select st_dt + (level-1) as date_col
                    from dt
                    connect by level <= ( end_dt - st_dt ))
select b.ticket_no
       , d.date_col
from backlog b
     cross join dt_range d
where d.date_col between b.submit_date and b.resolved_date
and b.submit_date != b.resolved_date
order by b.ticket_no
       , d.date_col
/

因此,它会生成一个包含所有日期的TICKET_NO列表:

 TICKET_NO DATE_COL
---------- ---------
       100 12-SEP-15
       100 13-SEP-15
       100 14-SEP-15
       100 15-SEP-15
       200 12-SEP-15
       200 13-SEP-15
       200 14-SEP-15
       300 13-SEP-15
       300 14-SEP-15
       300 15-SEP-15
       400 13-SEP-15
       400 14-SEP-15
       400 15-SEP-15

14 rows selected.

SQL> 

结果集不包括#500票证,因为它在提交当天已解决。您可能需要调整过滤器以适合您的实际业务规则。