我有一个销售表,显示每周的产品编号,销售价值和销售量。我需要构建一个报告来显示这些值和卷以及上周的等效值。我还有一个Weeks表,它给出了本周的前一周数字(例如,如果当前周是2013-01,那么前一周的值是2012-52)。
因此,我认为从Weeks表中加入产品编号和上周编号的另一个Sales实例非常简单。然而,Teradata不允许我这样做,最初它抛出了Improper column reference in the search condition of a joined table
的错误,当我在第二个Sales实例之前重新命令查询引用Weeks时它现在尝试运行但是给了我{{1}错误,所以我认为我的方法是不正确的。我的SQL如下:
No more spool space
有人可以在这里建议我做错了吗?看起来这应该是可以实现的。
答案 0 :(得分:1)
我建议使用Window Aggregate Function通过SALES
表的单次传递来完成此任务:
SELECT DISTINCT
s.Week_Number,
s.Product_Number,
s.Sales_Value,
s.Sales_Volume,
MAX(s.Sales_Value) OVER (PARTITION BY s.Product_Number
ORDER BY s.Week_Number DESC
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS LW_Sales_Value,
MAX(s.Sales_Volume) OVER (PARTITION BY s.Product_Number
ORDER BY s.Week_Number DESC
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS LW_Sales_Volume
FROM SALES s;