相当于领先和滞后,以获得以前的购买数量

时间:2015-07-07 17:04:07

标签: sql teradata

我是Teradata的新手。我有下表,需要以下结果表:

Given Table and Result Table

结果表是2个表的延续,我没有提到ProdType的其余列:Rugby。但是还有5个Rugby专栏是可以理解的。

我能够编写以下查询,该查询仅为每个ProdType生成当前和以前的收入。我不知道如何继续为Last3Months,Last1Year和LifeTime的不同时间跨度编写它。

我的查询是:

select ORDERNO, ORDERTIME,PRODNAME, PRODTYPE,

(CASE WHEN PRODTYPE = 'CRICKET' then REVENUE ELSE 0 END) as CRICKET_CURRREV,
MIN(CRICKET_CURRREV) OVER (ORDER BY CRICKET_CURRREV ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS CRICKET_PREVREV,

(CASE WHEN PRODTYPE = 'SOCCER' then REVENUE ELSE 0 END) as SOCCER_CURRREV,
MIN(SOCCER_CURRREV) OVER (ORDER BY SOCCER_CURRREV ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS SOCCER_PREVREV,

(CASE WHEN PRODTYPE = 'RUGBY' then REVENUE ELSE 0 END) as RUGBY_CURRREV,
MIN(RUGBY_CURRREV) OVER (ORDER BY RUGBY_CURRREV ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS RUGBY_PREVREV

FROM GIVEN TABLE WHERE USERID='123'
ORDER BY ORDERTIME;

因此,在结果表中,我需要在不同时间范围内的特定订单之前的每种产品类型的收入。例如,第3条记录是CricBall,即Cricket。因此我的CricketPrevRev是44.24(第一次板球产品收入),我能够得到它。但是如果你看到相同的记录,Cricket_Last1Year的字段也应该有44.24,因为CricBall是在31Oct2011订购的,所以在订购此产品之前的一年内,CricBat被订购,即12Nov2010。所以CricBat的收入应该反映在第3记录中。 我希望这个例子能说清楚。 每个产品都应该如此。产品的生命周期列应该是在特定产品之前生成的总收入。

非常感谢任何帮助。

0 个答案:

没有答案