gpt4 book ai didi

mysql - 获取低于特定值的最接近值并分组

转载 作者:行者123 更新时间:2023-11-29 07:44:41 24 4
gpt4 key购买 nike

是否有可能使用没有连接的组函数获得低于特定值的最接近值?

date          productId    stock
2014-12-27 1 10
2014-12-31 1 20
2015-01-05 1 30
2014-12-28 2 10
2015-01-04 2 20

该值例如是日期,应小于 2015-01-01,但最高日期值和结果应按股票囊排序,因此结果应为:

date          productId    stock
2014-12-28 2 10
2014-12-31 1 20

当然,这可以通过联接来解决,但是联接在大型表中会更慢,不是吗?

最佳答案

您似乎正在为每个不同的产品 ID 查找 2014 年的最后一天。

你这样做

             SELECT MAX(date) date, product_id   
FROM yourtable
WHERE date < '2015-01-01'
GROUP BY product_id

这将为您提供日期、product_id 的集合。 (date, Product_id) 上的复合索引将使此查询的评估非常高效。

然后您将其加入到您的主表中,就像这样。

SELECT a.*
FROM yourtable AS a
JOIN (
SELECT MAX(date) date, product_id
FROM yourtable
WHERE date < '2015-01-01'
GROUP BY product_id
) AS b USING(date,product_id)
ORDER BY a.product_id, a.date

并检索 2014 年最后一项的详细记录。相同的复合索引将加速 JOIN。

您担心 JOIN 性能,这是合理的。但可以通过适当的索引来改进它。确实没有更好的方法了。

关于mysql - 获取低于特定值的最接近值并分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28159015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com