基于时间间隔的先前行的总和

时间:2015-07-08 17:30:35

标签: sql teradata

我无法获得预期的结果表。 我有下表:

Tables

我希望结果表在购买该特定产品之前的所有订单的1年前生成一列收入。这应该基于产品表。 例如,第一条记录将该字段设为0,因为之前没有订购产品。第二记录的收入为第一记录,因为第一记录是在第二记录之前的1年的时间内购买的。同样,第3条记录包含收入(第1和第2条记录的总和),因为它们落在第3条记录之前1年的时间段内。 但第四张唱片中有0张,因为在第4张唱片之前没有订购PAPERGIFT产品。第1,第2和第3条记录具有PRODUCTTABLE作为卡,因此收入总和。 因此,我希望这基于产品表和时间跨度。 我写了以下查询,但它没有产生正确的输出:

select orderserialno, prodsku, netrevenue, orderplacedtime, 

sum(netrevenue) OVER (PARTITION BY producttable, orderplacedtime - interval '365' day 
ROWS UNBOUNDED PRECEDING) AS REVENUE_BEFORE1YEAR

from scratch.net_revenue where userid ='001042874727'

上述查询中的任何更正以获得正确的输出将不胜感激。 谢谢。

1 个答案:

答案 0 :(得分:0)

据我所知,你必须使用派生表来实现这一目标。派生表将获得每个ProductTable的最大日期。然后你将加入到那里,这样你只能获得你正在寻找的时间范围内的行。这些方面的东西:

select
...
sum(nr.netrevenue) over (partition by producttable 
  order by nr.orderplacedtime rows unbounded preceding)
from
scratch.net_revenue nr
inner join 
(
select
ProductTable,
max(orderplacedtime) as MaxOrderTime
from
scratch.net_revenue
group by 1) t
on nr.orderplacedtime between (t.maxordertime - interval '365' day) and t.maxordertime
and nr.producttable = t.producttable