给定日期范围内按周计算的 Oracle 累计总数

Oracle cumulative totals by week for a given date range

我正在使用以下查询来获取给定日期范围内每周的列总计...

SELECT to_char(week_start - 1, 'dd-MON-yy') week_end, run_qty, acc_qty, CASE WHEN run_qty <> 0 THEN ROUND(acc_qty/run_qty, 4) ELSE 0 END pct

  FROM (SELECT week_start, SUM(run_qty) run_qty, SUM(acc_qty) acc_qty

          FROM (SELECT TRUNC(NEXT_DAY(TRUNC(created_date), 'Monday')) week_start, NVL(SUM(run_qty), 0) run_qty, NVL(SUM(accepted_qty), 0) acc_qty

                  FROM shema.table_a 
                  WHERE (some conditions)
                    AND created_date BETWEEN :FromDate AND :ToDate 
                  GROUP BY TRUNC(NEXT_DAY(TRUNC(created_date), 'Monday'))
                 UNION
                 SELECT TRUNC(NEXT_DAY(TRUNC(to_date(zday, 'dd-mon-rrrr')), 'Monday')) week_start, 0run_qty, 0acc_qty
                   FROM (SELECT :FromDate + (level - 1) zday
                           FROM dual
                         CONNECT BY LEVEL <= (:ToDate - :FromDate)))
          GROUP BY week_start
          ORDER BY week_start desc)

输入参数 :FromDate = 4/31/2015 和 :ToDate = 6/25/2015,这给了我每周的最后一天(周定义为周一至周日),运行 每周的总数,每周接受的总数,以及每周接受的 运行 总数的百分比,结果集中看起来像这样...

2015 年 6 月 28 日 0 0 0

2015 年 6 月 21 日 100 50 0.5

2015 年 6 月 14 日 50 40 0.8

2015 年 6 月 7 日 0 0 0

2015 年 5 月 31 日 0 0 0

2015 年 5 月 24 日 50 40 0.75

2015 年 5 月 17 日 80 50 0.625

2015 年 5 月 10 日 60 20 0.3333

2015 年 5 月 3 日 0 0 0

我可以使用类似的方法来计算 运行 宁总 运行 和接受的数量以及在提供的日期范围内接受的数量的百分比吗? (给我一个看起来像的结果集)...

2015 年 6 月 28 日 340 200 0.5882

2015 年 6 月 21 日 340 200 0.5882

2015 年 6 月 14 日 240 150 0.625

2015 年 6 月 7 日 190 110 0.5789

2015 年 5 月 31 日 190 110 0.5789

2015 年 5 月 24 日 190 110 0.5789

2015 年 5 月 17 日 140 70 0.5

2015 年 5 月 10 日 60 20 0.3333

2015 年 5 月 3 日 0 0 0

我想通了...以防万一有人通过搜索类似问题的解决方案遇到此线程,我将上面的查询包装在...
SELECT week_end, run_qty, acc_qty, pct

FROM(上面的查询)
模型 维度(row_number()超过(排序to_date(week_end,'dd-MON-yy')asc)rec)

措施(week_end、run_qty、acc_qty、pct)

规则(

run_qty[rec > 1] 按 rec = run_qty[cv()] + run_qty[cv() - 1],

排序

acc_qty[rec > 1] 按 rec = acc_qty[cv()] + acc_qty[cv() - 1],

排序

pct[rec >= 0] 按 rec = CASE WHEN run_qty[cv()] <> 0 THEN ROUND(acc_qty[cv()]/run_qty [cv()], 4) 否则 0 结束 )

排序方式 to_date(week_end, 'dd-MON-yy') desc
...它运行得很快,给了我预期的结果