我一直在努力建立一个独特的计数和销售总额,基于从第181天开始的订单开始的数据表中每天返回4到180天的订单,然后按月和按月分组。一年,但一直无法做到。
最终结果如下表所示。每个订单会出现多次,最多176次,但在给定的一天会有所不同(订单42999,例如10月10日至2011年10月10日至2月期间每天计算一次)例如01-2012)
cities := []node{}
for i := 0; i<47 ;i++ {
n := node{name: strconv.Itoa(i), children: map[string]int{}}
cities = append(cities,n)
}
订单计数将采用当天前4到180天执行的特定日期的销售总数(因此,2011年3月1日将对2010年11月1日和2010年11月1日之间的订单进行明确的订单计数和订单总额以2011年2月25日为例,其后是一个函数,汇总了每个月的总数。每年上表。
答案 0 :(得分: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')
答案 1 :(得分: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;