查询以显示当年新的销售增长

时间:2019-03-27 19:16:18

标签: mysql

我正在尝试寻找今年的新销售量,这些销售量定义为我们今年销售的新客户,而不是持续销售的新客户,或者今年我们销售给现有客户但我们去年没有销售的新产品。

select sales1.Rep, sum(sales1.InvPrice) as newsales from sales sales1
where YEAR(sales1.InvDate)=YEAR(CURDATE()) and not exists (select 1
from sales sales2
where YEAR(sales2.InvDate)=YEAR(DATE_ADD(CURDATE(), INTERVAL -1, YEAR)) and 
CONCAT(sales1.CustNo, sales1.Item)=CONCAT(sales2.CustNo, sales2.Item) limit 1)
group by sales1.Rep

该查询返回每个代表的销售美元,但是运行需要一个多小时。有没有更好的方法来编写此查询,以便它不会花费很长时间?从2017年1月1日到现在,我的销售表中大约有60万行。

1 个答案:

答案 0 :(得分:0)

您可以尝试执行此操作,但是索引是否正确? 如果没有,请从查询中发布EXPLAIN。

SELECT sales1.Rep
        , sum(sales1.InvPrice) as newsales
FROM sales sales1
WHERE sales1.InvDate BETWEEN DATE_FORMAT(NOW(),'%Y-01-01 00:00:00') AND DATE_FORMAT(NOW(),'%Y-12-31 23:59:59')
    AND NOT EXISTS (
            SELECT 1 FROM sales sales2
            WHERE sales2.InvDate BETWEEN DATE_FORMAT(NOW() - INTERVAL 1 YEAR '%Y-01-01 00:00:00')
                                AND DATE_FORMAT(NOW() - INTERVAL 1 YEAR,'%Y-12-31 23:59:59')
            AND ( sales1.CustNo = sales2.CustNo AND sales1.Item = sales2.Item)
            LIMIT 1)
GROUP BY sales1.Rep;