我无法获得预期的结果表。 我有下表:
我希望结果表在购买该特定产品之前的所有订单的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'
上述查询中的任何更正以获得正确的输出将不胜感激。 谢谢。
答案 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