【问题标题】:Joining a second instance of Sales table to get last weeks Sales加入 Sales 表的第二个实例以获取上周的销售额
【发布时间】:2013-05-18 12:37:14
【问题描述】:

我有一个销售表,其中显示每周的产品编号、销售价值和销售量。我需要构建一个报告来显示这些值和数量以及前一周的等效值。我还有一个 Weeks 表,它为我提供了当前周的前一周编号(例如,如果当前周是 2013-01,那么前一周的值是 2012-52)。

因此,我认为从 Weeks 表中加入有关产品编号和前一周编号的 Sales 的另一个实例会很简单。但是 Teradata 不允许我这样做,最初它抛出了 Improper column reference in the search condition of a joined table 的错误,当我重新排序查询以引用 Sales 的第二个实例之前的 Weeks 时,它现在尝试运行但给了我一个 No more spool space 错误,所以我认为我的方法是不正确的。我的SQL如下:

select s.Week_Number,
       s.Product_Number,
       s.Sales_Value,
       s.Sales_Volume,
       s_lw.Sales_Value,
       s_lw.Sales_Volume

   from SALES s
  inner join WEEKS w 
     on s.Week_Number = w.Week_Number
   left join SALES s_lw 
     on     s.Product_Number = s_lw.Product_Number
        and s_lw.Week_Number = w.Last_week_Number

谁能建议我在这里做错了什么?看来这应该是可以实现的。

【问题讨论】:

  • 我认为最后一行应该是and s_lw.Week_Number = w.Last_week_Number。正如你现在所拥有的,s.Week_Number 必须同时等于两个星期数。不过,我认为这不能解释您的错误消息。
  • 是的,你说的很对。没有正确复制过来,谢谢指出
  • 您的上述查询是否用于为您的报告创建表格?如果是这样,请务必记住“SELECT”列表中的第一个列默认为primary index。如果此列中的值大多不是唯一的,那么您可能会遇到像您遇到的假脱机空间错误。
  • 不,我只是用它来返回数据。我尝试使用临时表设置等效查询并且运行良好,因此这与 Sales 表有关。销售表实际上是一个视图,但我不应该认为这会阻止这项工作。也许我只好另辟蹊径,这很烦人

标签: sql teradata


【解决方案1】:

我建议使用窗口聚合函数通过 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;

【讨论】:

  • 非常感谢,这是解决问题的好方法,而且正如您所建议的那样无疑更有效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
  • 2020-06-09
相关资源
最近更新 更多