SQL优化-按客户经理计算当月销售额



我已经编写了下面的查询,但运行速度非常慢。有人能建议我如何改进,甚至把我推向正确的方向吗?

我的目标是列出当月每个销售区域的销售额和成本(区域基本上是客户经理)

IT包含订单行

IH包含订单标题(包括销售区域)

SELECT it.ih_terrtry                          AS terr, 
Sum(it.it_exvat) / 100                 AS orderTotal, 
Sum(it.it_cost * it.it_qtydelv) / 1000 AS orderCost 
FROM   (SELECT it.*, 
iH.ih_terrtry 
FROM   l_itran it 
LEFT OUTER JOIN l_ihead ih 
ON ih.ih_doc = it.it_doc 
WHERE  it.it_status = 'X' 
AND Month(it_dtedelv) = Month(Datetime()) 
AND Year(it_dtedelv) = Year(Datetime())) it 
GROUP  BY terr 

如果不考虑VFP中多个字段的复合索引,我建议您的l_itran表至少只在it_dtedelv字段上有一个索引。可以是复合的,但由于日期进程和其他字段的连接字符串和dtot(),这会变得很混乱。

接下来,如果您在不同的月份/年份部分运行函数,VFP无法优化日期查询。相反,创建两个变量,分别到达当前月初和下个月初。例如:2019年2月1日和2019年3月1日。这样,你可以在2月1日之前获得更大或相等的东西,但在3月1日以下,如果你的日期字段包括时间,则在2月的最后一天至晚上11:59:59。

此外,您不需要通过查询所有记录,然后对结果求和来嵌套查询。这应该是可行的,正如我在下面所做的。最后一点提示/问题。为什么要对事务的HEADER表进行LEFT JOIN。我认为应该总是有一个标题,但那只是我。

fromDate = TTOD( DATETIME()) - DAY( DATETIME()) + 1
toDate = GOMONTH(x,1)
SELECT ;
iH.ih_terrtry Terr,;
Sum(it.it_exvat) / 100 AS orderTotal, ;
Sum(it.it_cost * it.it_qtydelv) / 1000 AS orderCost;
FROM;
l_itran it ;
LEFT OUTER JOIN l_ihead ih ;
ON it.it_doc = ih.ih_doc ;
WHERE;
it.it_dtedelv >= fromDate;
AND it.it_dtedelv < toDate ;
AND it.it_status = 'X' ;
GROUP  BY ;
iH.ih_terrtry

相关内容

  • 没有找到相关文章

最新更新