mysql按日期分组,具有多个连接
我有供应商表,供应商id标记在tblstockhistory表中,在这个tblstockhistory表中包含StockID(来自tblstock表的引用),我有StockID、ProductCode、, 我有tblbasket表,在这里我维护ProductCode 我的想法是, 我想通过supplierID显示thw统计数据,当我通过供应商id时,它会显示这个供应商提供的商品销售统计数据 但上面的查询有时返回空值,执行时间太长,大约50秒 我从上面询问下面是什么样的问题mysql按日期分组,具有多个连接,sql,mysql,Sql,Mysql,我有供应商表,供应商id标记在tblstockhistory表中,在这个tblstockhistory表中包含StockID(来自tblstock表的引用),我有StockID、ProductCode、, 我有tblbasket表,在这里我维护ProductCode 我的想法是, 我想通过supplierID显示thw统计数据,当我通过供应商id时,它会显示这个供应商提供的商品销售统计数据 但上面的查询有时返回空值,执行时间太长,大约50秒 我从上面询问下面是什么样的问题 SELECT
SELECT
tba.UpdatedDate AS UpdatedDate,
tsh.SupplierID,
ts.ProductCode as ProductCode,
sum(tba.AfterDiscount) as AfterDiscount,
sum(tba.Quantity) as Quantity
FROM
tblstockhistory as tsh
left join tblstock as ts
on tsh.StockID=ts.StockID
left join tblbasket as tba
on ts.ProductCode=tba.ProductCode
and tsh.SupplierID=49
AND tba.Status=3
group by
tba.UpdatedDate
ORDER BY
Quantity DESC
tblstockhistory在没有stockID的情况下是否存在。如果没有,您可以将其转换为内部联接,这会有所帮助 e、 g
也可以考虑在当前不存在的情况下添加索引。 至少我会将以下字段编入索引,因为它们很可能会被连接和查询
- tblstockhistory.SockID
- tblstockhistory.SupplierID
- tblstock.StockID
- tblstock.ProductCode
- tblbasket.ProductCode
- tblBacket.状态
- tblbasket.updateDate
最后,如果这个查询非常重要,那么您可以快速创建摘要表并定期更新它们。tblstockhistory在没有stockID的情况下是否存在。如果没有,您可以将其转换为内部联接,这会有所帮助 e、 g
也可以考虑在当前不存在的情况下添加索引。 至少我会将以下字段编入索引,因为它们很可能会被连接和查询
- tblstockhistory.SockID
- tblstockhistory.SupplierID
- tblstock.StockID
- tblstock.ProductCode
- tblbasket.ProductCode
- tblBacket.状态
- tblbasket.updateDate
最后,如果此查询的快速进行非常重要,您可以创建摘要表并定期更新它们。将group by子句重新编写为,然后重试
tblstockhistory as tsh
INNER join tblstock as ts
on tsh.StockID=ts.StockID
如果要同时显示ProductCode,请将其添加到group by子句或从select子句中删除。您在查询中提到了ProductCode,但在所需的“结果”中没有提到。请将group by子句重新写入为,然后重试
tblstockhistory as tsh
INNER join tblstock as ts
on tsh.StockID=ts.StockID
如果要同时显示ProductCode,请将其添加到group by子句中,或者从select子句中删除。要提高性能,请确保在联接中使用的所有字段都已编制索引。要提高性能,请确保所有字段都已编制索引使用in连接是索引的。对于我应该在此处创建索引的字段,stockid是必需的,因为只有stockid,我们才能提取产品代码,存储在tblbasket表中的产品代码,添加了我应该至少索引的字段。此外,由于StockID是必需的,我肯定会将其更改为内部联接。您可能还想从Select中删除ProductCode,因为它似乎不在示例输出中。如果在ts.ProductCode=tba.ProductCode或ts.ProductCode上说这一行是ProductCode,我的意思是将ts.ProductCode作为ProductCode,我应该在此处为其创建索引StockId的字段是必需的,因为只有stockid,我们才需要提取ProductCode,存储在tblbasket表中的ProductCode,添加了我至少应该索引的字段。此外,由于StockID是必需的,我肯定会将其更改为内部联接。您可能还希望从选择中删除ProductCode,因为它似乎不在示例输出中。在ts.ProductCode=tba.ProductCode或ts.ProductCode上说这一行是ProductCode我的意思是ts.ProductCode是ProductCode,但这是
group by
tba.UpdatedDate, tsh.SupplierID