0

该数据库有数千个单独的项目,每个项目都有多个首次销售日期和每周销售结果。我需要每个产品前 12 周的销售总额。

当我们使用 SUM(CASE) 知道开始日期时,代码用于之前的单个查询。这太手动了,尽管有数千种产品需要审查,我们正在寻找一种智能方法来加快速度。

我可以在此基础上求总和找到最短的首次购物日期,然后对接下来 12 周的结果求和吗?如果是这样,我该如何构建它,或者有更好的方法吗?

数据库中的列我需要参考样本数据

PROD_ID | WEEK_ID | STORE_ID | FIRST_SHOP_DATE | ITM_VALUE

12345543 | 201607 | 10000001 | 201542 | 24,356

12345543 | 201607 | 10000002 | 201544 | 27,356

12345543 | 201608 | 10000001 | 201542 | 24,356

12345543 | 201608 | 10000002 | 201544 | 27,356

32655644 | 201607 | 10000001 | 201412 | 103,245

32655644 | 201607 | 10000002 | 201420 | 123,458

32655644 | 201608 | 10000001 | 201412 | 154,867

32655644 | 201608 | 10000002 | 201420 | 127,865

4

2 回答 2

2

你可以这样做:

select itemid, sum(sales)
from (select t.*, min(shopdate) over (partition by itemid) as first_shopdate
      from t
     ) t
where shopdate < first_stopdate + interval '84' day
group by id;

您不指定数据库,因此这使用 ANSI 标准语法。日期操作(特别是)因数据库而异。

于 2017-06-30T12:29:53.923 回答
0

嗨,Kirsty,试试这样 -

select a.Item,sum(sales) as totla
from tableName a JOIN
(select Item, min(FirstSoldDate) as FirstSoldDate from tableName group by item) b
ON a.Item = b.Item
where a.FirstSoldDate between b.FirstSoldDate and (dateadd(day,84,b.FirstSoldDate))
group by a.Item

谢谢 :)

于 2017-06-30T12:56:38.857 回答