是否有可能使用没有连接的组函数获得比特定值更接近的值?
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
当然,这可以通过连接解决,但是大表中的连接速度较慢,不是吗?
答案 0 :(得分:2)
您正在寻找2014年的最后一天,似乎是每个不同的产品ID。
你用
做到了 SELECT MAX(date) date, product_id
FROM yourtable
WHERE date < '2015-01-01'
GROUP BY product_id
这会为您提供date, product_id
的集合。 (date, product_id)
上的复合索引将使此查询非常有效地进行评估。
然后你join
到主表,就像这样。
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。
你担心加入表现,这是合法的。但是可以通过适当的索引来改进它。确实没有更好的方法。