0

我有两张桌子,一张包含产品,一张购买。我试图找到每种产品最近 3 次购买价格的平均值。因此,在下面的示例中,对于产品“bean”,我希望返回产品时间 1230854663 之前最后 3 个购买价格的平均值,即客户 C、D、E 的平均值(239)

产品

+-------+------------+
| Name  | time       |
+-------+------------+
| beans | 1230854764 |
+-------+------------+

购买

+----------+------------+-------+
| Customer | time       | price |
+----------+------------+-------+
| B        | 1230854661 |   207 |
| C        | 1230854662 |   444 |
| D        | 1230854663 |    66 |
| E        | 1230854764 |    88 |
| A        | 1230854660 |   155 |
+----------+------------+-------+

我想出了一个嵌套的选择查询,它几乎可以让我到达那里,即如果我对时间进行硬编码,它就可以工作:

SELECT products.name,(SELECT avg(temp.price) FROM (select purchases.price from purchases WHERE purchases.time < 1230854764 order by purchases.time desc limit 3) temp) as av_price from products products

但是,如果查询引用 product.time 而不是像下面这样的硬编码时间,我会收到一个错误,即列 products.time 不存在。

SELECT products.name,(SELECT avg(temp.price) FROM (select purchases.price from purchases WHERE purchases.time < products.time order by purchases.time desc limit 3) temp) as av_price from products products

我不确定我是否在嵌套查询中犯了一个简单的错误,或者我正在以完全错误的方式解决这个问题,应该使用连接或其他构造,无论哪种方式我都被卡住了。任何帮助都会受到极大的欢迎。

4

1 回答 1

0

您查询中的唯一问题是您没有在内部查询中提到产品表。

SELECT products.name,(SELECT avg(temp.price) 
FROM (select purchases.price from purchases,products 
WHERE purchases.time < products.time order by purchases.time desc limit 3) temp) as
av_price from products products
于 2012-05-30T22:19:13.447 回答