SQL总计12周的数据基于不同项目的第一个销售日期

时间:2017-06-30 12:27:34

标签: sql sql-server sum rolling-sum

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

当我们使用SUM知道开始日期时,代码用于以前的个别查询(CASE。这太过于手动,但有数千种产品需要审核,我们正在寻找一种智能方法来加快这一点。

我可以在此基础上找到最小的第一个购物日期,然后总结接下来的12周结果吗?如果是这样,我该如何构建它,还是有更好的方法?

数据库中的列我需要引用样本数据

PROD_ID | WEEK_ID | STORE_ID | FIRST_SHOP_DATE | ITM_VALUE

12345543 | 201607 | 10000001 | 201542 | 24356

12345543 | 201607 | 10000002 | 201544 | 27356

12345543 | 201608 | 10000001 | 201542 | 24356

12345543 | 201608 | 10000002 | 201544 | 27356

32655644 | 201607 | 10000001 | 201412 | 103245

32655644 | 201607 | 10000002 | 201420 | 123458

32655644 | 201608 | 10000001 | 201412 | 154867

32655644 | 201608 | 10000002 | 201420 | 127865

2 个答案:

答案 0 :(得分: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标准语法。日期操作(特别是)因数据库而异。

答案 1 :(得分: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

谢谢:)