在VFP中,如果不使用多个字段的复合索引,我建议至少,您的l_itran表只在it_dtedelv字段上有一个索引。可以是复合的,但如果将日期进程和其他字段的字符串和dtot()连接起来,则会很混乱。
接下来,如果在不同的月/年部分上运行函数,VFP无法优化日期查询。相反,创建两个变量,分别到达本月初和下个月初。示例:2019年2月1日和2019年3月1日。这样,您可以得到大于或等于2月1日,但小于3月1日,如果您的日期字段包含时间,则包含2月最后一天到晚上11:59:59。
此外,不需要通过查询所有记录,然后对结果求和来嵌套查询。这应该是一个可行的,因为我有下面。最后一个问题。为什么您有一个左连接到事务的头表。我想应该有个头球,但那只是我。
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