【发布时间】:2020-08-19 09:57:37
【问题描述】:
我一直在尝试计算每月回报的同比增长,并且一直在重写相同的查询数小时,但没有运气。我见过解决方案,但它们都是其他数据库解决方案。
我正在尝试基本上实现以下目标:
这是我构建的查询,尽管由于子查询每行运行,我从未真正完成过运行(运行了 15 分钟以上)。
这个表有 2m+ 行,索引很好,速度很快,但子查询会杀死它。
可能是完全错误的方法,但这就是我所拥有的。
SELECT
YEAR(thisyear.trandte) AS `Year`,
MONTH(thisyear.trandte) AS `YearMonth`,
SUM(lastyear.totamount) AS LastYearSales,
SUM(thisyear.totamount) AS ThisYearSales
FROM
sync_invoice_lines thisyear
LEFT JOIN
sync_invoice_lines lastyear ON
MONTH(thisyear.trandte) = (MONTH(lastyear.trandte)) AND
YEAR(thisyear.trandte) = (YEAR(lastyear.trandte) - 1)
WHERE
thisyear.type = 'IN' AND
lastyear.type = 'IN' AND
thisyear.sync_active = 1 AND
lastyear.sync_active = 1 AND
GROUP BY `Year`, `YearMonth`
【问题讨论】:
-
您当前的查询效率非常低,并且会返回完全错误的数字。您以相同的年份/月份连接所有行,即如果您在 2020 年 7 月获得 1000 行,则在 SUM 之前的连接之后您将获得 1000*1000 行。
标签: mysql sql sum e-commerce window-functions