查询计算特定日期+/- 4周的数据

时间:2016-05-03 15:31:38

标签: mysql date mysql-workbench

我必须计算特定日期(创建日期)4周前和4周后的销售额(需要计算的数据是每周)

我的拦截器是按周计算4周前的项目列表,并在数周之后计算相同的数量。所以我必须在8次更改日期时进行此查询

unable to launch iis express.. port is in use

我必须为 date-1,date-2 ...,date-4 然后 date + 1,...,date + 4 执行此操作(有时我必须在+/- 12周内完成)并为views_table执行相同的操作,因此它对 10K 产品的 48个查询进行了同样的操作在工作台中生成bug。有没有其他方法可以做到这一点?以TMP表为例,我该如何编写查询。感谢。

3 个答案:

答案 0 :(得分:1)

SELECT p.id   AS product
     , IFNULL(SUM(IF(t.creation_date >= i.dt + INTERVAL -4 WEEK AND t.creation_date < i.dt + INTERVAL -3 WEEK,t.sales,NULL)),0) AS `d-4`
     , IFNULL(SUM(IF(t.creation_date >= i.dt + INTERVAL -3 WEEK AND t.creation_date < i.dt + INTERVAL -2 WEEK,t.sales,NULL)),0) AS `d-3`
     , IFNULL(SUM(IF(t.creation_date >= i.dt + INTERVAL -2 WEEK AND t.creation_date < i.dt + INTERVAL -1 WEEK,t.sales,NULL)),0) AS `d-2`
     , IFNULL(SUM(IF(t.creation_date >= i.dt + INTERVAL -1 WEEK AND t.creation_date < i.dt + INTERVAL  0 WEEK,t.sales,NULL)),0) AS `d-1`
     , IFNULL(SUM(IF(t.creation_date >= i.dt + INTERVAL  0 WEEK AND t.creation_date < i.dt + INTERVAL  1 WEEK,t.sales,NULL)),0) AS `d+0`
     , IFNULL(SUM(IF(t.creation_date >= i.dt + INTERVAL  1 WEEK AND t.creation_date < i.dt + INTERVAL  2 WEEK,t.sales,NULL)),0) AS `d+1`
  FROM ( SELECT '2016-04-01' AS dt ) i
  JOIN products p
    ON p.id IN 
       ( product1
       , product2
       , ...
       , product10000
       )
  LEFT
  JOIN Sales_table t
    ON t.product_id = p.id
   AND t.creation_date >= i.dt + INTERVAL -6 WEEK
   AND t.creation_date <  i.dt + INTERVAL  6 WEEK
 GROUP BY p.id

答案 1 :(得分:0)

只需使用自我加入即可获得结果

select t.date,sum(t1.sales) 
 from Sales_table t join Sales_table t1 on
  t1.date between date_add(t.date, interval -4 week) and
     date_add(t.date, internal 4 week)

使用此查询获取四周前后的销售总和

如果您想要特定产品的详细信息,请使用以下查询(产品明智的总和)

select t.date,sum(t1.sales) 
 from Sales_table t join Sales_table t1 on
  t.product=t1.product and
  t1.date between date_add(t.date, interval -4 week) and
     date_add(t.date, internal 4 week)

答案 2 :(得分:0)

我已经使用了您的查询(如下所示)。我使用的表是 P_Master P_Master_Cat 我可以使用第一个,因为它上面存在所有信息)。当我运行查询时,我遇到以下问题&#34; 错误代码:1111。无效使用组功能&#34;

SELECT p.sku_conf  AS product
 , IFNULL(SUM(IF(t.date >= i.dt + INTERVAL -4 WEEK AND t.date < i.dt + INTERVAL -3 WEEK,t.ItemID,NULL)),0) AS `d-4`
 , IFNULL(SUM(IF(t.date >= i.dt + INTERVAL -3 WEEK AND t.date < i.dt + INTERVAL -2 WEEK,t.ItemID,NULL)),0) AS `d-3`
 , IFNULL(SUM(IF(t.date >= i.dt + INTERVAL -2 WEEK AND t.date < i.dt + INTERVAL -1 WEEK,t.ItemID,NULL)),0) AS `d-2`
 , IFNULL(SUM(IF(t.date >= i.dt + INTERVAL -1 WEEK AND t.date < i.dt + INTERVAL  0 WEEK,t.ItemID,NULL)),0) AS `d-1`
 , IFNULL(SUM(IF(t.date >= i.dt + INTERVAL  0 WEEK AND t.date < i.dt + INTERVAL  1 WEEK,t.ItemID,NULL)),0) AS `d+0`
 , IFNULL(SUM(IF(t.date >= i.dt + INTERVAL  1 WEEK AND t.date < i.dt + INTERVAL  2 WEEK,t.ItemID,NULL)),0) AS `d+1`
FROM ( SELECT '2016-01-06' AS dt ) i
JOIN P_Master_Cat p
  ON p.sku_conf IN 
  ('OE599EL9',
  'OE599EL86',
  'OE599EL90',
  'OE599EL75')
LEFT JOIN P_Master t
  ON t.SKUConf = p.sku_conf
  AND t.date >= i.dt + INTERVAL -6 WEEK
  AND t.date <  i.dt + INTERVAL  6 WEEK
GROUP BY p.sku_conf