查询偏移滚动和&计数 - Oracle SQL

时间:2016-10-25 01:58:38

标签: sql oracle

我一直在努力建立一个独特的计数和销售总额,基于从第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日为例,其后是一个函数,汇总了每个月的总数。每年上表。

2 个答案:

答案 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;