概述
产品ID | 变动时间 | 变动数量 | 当前库存 |
1 | 2021-06-22 | 0 | 10 |
2 | 2021-06-22 | 0 | 100 |
1 | 2021-06-23 | -3 | 7 |
1 | 2021-06-24 | -2 | 5 |
2 | 2021-06-24 | -20 | 80 |
1 | 2021-06-26 | -5 | 0 |
2 | 2021-06-26 | -10 | 70 |
2 | 2021-06-27 | -30 | 40 |
2 | 2021-06-30 | -40 | 0 |
1 | 2021-06-30 | 5 | 5 |
库存变动有几个特点需要注意:库存并不是都是减,有可能会加(比如退货),所以当库存为0,只能代表当前时间库存为0,不代表之后也为0。
- 要求:查看2021-06-27库存为0的数据
思路:找出2021-06-27之前每个产品最后的变动记录,取库存为0的数据。
- 方法一:select * from 库存变动表 c where exists (select 1 from 库存变动表 a where 变动时间 = (select max(变动时间) from 库存变动表 b where a.产品ID=b.产品ID and 变动时间 <= 2021-06-27)where a.当前库存 =0 and a.产品ID=c.产品ID)
- 方法二(推荐):select * from 库存变动表 c where exists (select 1 from (
SELECT
IF ( @pid = h.产品ID, 2, 1 ) f,
@pid := h.产品ID,
h.产品ID,
h.当前库存
FROM
库存变动表 h,
( SELECT @pid := 0 ) r
WHERE 变动时间 <= 2021-06-27
ORDER BY
h.产品ID,
h.变动时间 DESC
) a where a.f=1 and c.product_id = a.product_id and a.当前库存 =0)
方法二的思路是先按产品ID、变动时间(降序)排序,再利用变量判断上下行产品ID是否相等。不等的时候就是某产品变动时间最大的时候,标志为1。之后只要找出标志为1的和当前库存=0的记录就可以了。根据经过测试方法一要43秒,方法二只要0.2秒。
如果你有更好方法的,请留言指教!!!!
最后
以上就是尊敬宝马为你收集整理的mysql 优化查询时间最大的记录的全部内容,希望文章能够帮你解决mysql 优化查询时间最大的记录所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复