给定日期范围内按周计算的 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
...它运行得很快,给了我预期的结果
我正在使用以下查询来获取给定日期范围内每周的列总计...
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
...它运行得很快,给了我预期的结果