2016-10-25 22 views
0

我一直在努力根据数据表中每天放置4至180天后的订单构建不同的计数和总计销售额181,然后按月份分组&年,但一直无法做到。查询偏移滚动计数和计数 - Oracle SQL

最终结果如下表所示。每个订单将显示多次,最多176次,但在给定日期内会有所不同(订单42999,例如10-01-2011将在每天10-05-2011和2- 01-2012例如)

| OrdMonthYr | Grouped Order Count | Sum of Orders | 
------------------------------------------------------ 
| 2011-06 |  140    |  $450  | 
| 2011-07 |  190    |  $500  | 
| 2011-08 |  250    |  $600  | 
------------------------------------------------------ 

顺序计数将采取销售的总数为一个给定的一天中执行之前那天4至180天(因此2011年3月1日将具有不同的顺序计数和顺序以2010年11月1日至2011年2月25日之间的订单总和为例),然后按照上表中的每个表格将这些总计中的每一个累计至月份&年。

回答

1

据我了解你想获得累计总和计数前几天的4至180.但其并不清楚应该如何卷起 如果是这样你可以使用分析功能。下一个查询将计算它

select trunc(o.orderdate) 
     ,count(*) over (order by trunc(o.orderdate) range between 180 PRECEDING AND 4 PRECEDING) 
     ,sum(amount) over (order by trunc(o.orderdate) range between 180 PRECEDING AND 4 PRECEDING) 
    from orders o 

那么如何将订单滚动到月。可能是你需要采取每个月的第一天,让之和金额。如果这样你就可以只取一排从以前的查询每个月:

select ord_date, cnt,sum_amount FRoM (
select trunc(o.orderdate) as ord_date 
     ,count(*) over (order by trunc(o.orderdate) range between 180 PRECEDING AND 4 PRECEDING) as cnt 
     ,sum(amount) over (order by trunc(o.orderdate) range between 180 PRECEDING AND 4 PRECEDING) as sum_amount 
     ,row_number() over (order by trunc(o.orderdate),rowid) as RN 
    from orders o) 
WHERE rn = 1 
    and ord_date = trunc(ord_date,'MM') 
+0

我希望按月份和年份将订单的日常计数从4天提前至180天。 – Danimov82

+0

尚不清楚,例如我们采取了2016年1月的命令,我们应该考虑?从2015年7月5日至2016年12月28日,或者我们应该将2015年7月5日至2016年12月28日期间所有订单从2016年1月1日起+所有订单从2015年7月6日起直至29日-dec-2016 for 02-jan-2016 ... to 31-jan-2016? –

+0

我们将于2015年5月5日至2016年12月28日为3月1日。 3月2日将是2015年7月6日至2016年12月29日,整个月份是如此。然后我们会按月累计每天的总数 – Danimov82

0

这是得到你想要的?

select orderdate, 
     (select count(*) 
     from orders o 
     where o.orderdate between d.dte - 180 an d.dte - 4 
     ) as cnt, 
     (select sum(amount) 
     from orders o 
     where o.orderdate between d.dte - 180 an d.dte - 4 
     ) as amount 
from (select distinct orderdate as dte from orders) d; 
+0

的范围必须是4至180天回来,所以会它是(d.dte - 4)和(d-dte - 180)? – Danimov82

+0

@ Danimov82。 。 。啊,现在我明白了这是怎么回事。 –

+0

所以计数和总数是订单ID和订单金额的总和,我假设 – Danimov82