基于前一周范围

时间:2017-06-01 01:44:35

标签: sql teradata

在解决以下问题时需要SQL查询帮助:

输入表的产品ID,周和销售额是唯一的,而列的开始和结束周列是我想要总结该特定周的销售额的范围。

input table

我们希望从输入表中提取产品ID和周,并根据开始周和结束周范围之间的周来获得销售总额。

每个产品ID和周的销售额值是基于输入表中该产品和周组合的相应开始和结束周的销售总额。

output table

我试图在输入表上进行自我加入,但意识到它不起作用,因为我需要加入Product ID和Week,这将使目标无效。

Select a.Product ID, a.Week, Sum(a.Sales) 
from Input as a, Input as b 
  where a.Product ID = b.Product ID 
  and a.Week between b.Start Week and b.End Week 
group by 1,2

2 个答案:

答案 0 :(得分:2)

您只需切换到外部加入:

Select a.Product ID, a.Week, Sum(a.Sales)
from Input as a LEFT JOIN Input as b 
  ON a.Product ID = b.Product ID 
 and a.Week between b.Start Week and b.End Week 
group by 1,2

这应该会产生比Alec的子查询更好的计划。

答案 1 :(得分:0)

我对子查询并不是很疯狂,但它至少应该让你开始:

SELECT
  a.ProductID,
  a.Week,
  (
    SELECT
      SUM(b.Sales)
    FROM
      Table b
    WHERE
      b.ProductID = a.ProductID AND
      b.Week BETWEEN a.StartWeek AND a.EndWeek
  ) as CumulativeSales
FROM
  Table a