mysql按日期分组,具有多个连接

mysql按日期分组,具有多个连接,sql,mysql,Sql,Mysql,我有供应商表,供应商id标记在tblstockhistory表中,在这个tblstockhistory表中包含StockID(来自tblstock表的引用),我有StockID、ProductCode、, 我有tblbasket表,在这里我维护ProductCode 我的想法是, 我想通过supplierID显示thw统计数据,当我通过供应商id时,它会显示这个供应商提供的商品销售统计数据 但上面的查询有时返回空值,执行时间太长,大约50秒 我从上面询问下面是什么样的问题 SELECT

我有供应商表,供应商id标记在tblstockhistory表中,在这个tblstockhistory表中包含StockID(来自tblstock表的引用),我有StockID、ProductCode、, 我有tblbasket表,在这里我维护ProductCode

我的想法是, 我想通过supplierID显示thw统计数据,当我通过供应商id时,它会显示这个供应商提供的商品销售统计数据

但上面的查询有时返回空值,执行时间太长,大约50秒

我从上面询问下面是什么样的问题

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