我必须计算特定日期(创建日期)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表为例,我该如何编写查询。感谢。
答案 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