MySQL嵌套查询

MySQL嵌套查询,mysql,select,Mysql,Select,我有两张桌子,一张包含产品,一张包含采购。我试图找出每种产品最近三次购买价格的平均值。因此,在下面的示例中,对于产品“beans”,我希望返回产品时间1230854663之前最后3个购买价格的平均值,即客户C、D、e 239的平均值 产品 购买 我提出了一个嵌套的select查询,它几乎可以让我到达那里,也就是说,如果我硬编码时间,它就会工作: 选择products.name,从SelectPurchases.price FROM purchases中选择avgtemp.price,其中purc

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

产品

购买

我提出了一个嵌套的select查询,它几乎可以让我到达那里,也就是说,如果我硬编码时间,它就会工作:

选择products.name,从SelectPurchases.price FROM purchases中选择avgtemp.price,其中purchases.time<1230854764 order by purchases.time desc limit 3 temp作为av_price 从产品

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

选择products.name,从SELECT purchases.price FROM purchases中选择avgtemp.price,其中purchases.time
我不确定我是否在嵌套查询中犯了一个简单的错误,或者我是以完全错误的方式进行的,应该使用连接或其他构造,无论哪种方式,我都被卡住了。任何帮助都会收到。

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

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

您是指产品时间1230854764之前最近3次购买价格的平均值吗?不,那也没有道理。我被你的时间值搞糊涂了,它们对吗?你的表结构没有标准化。采购没有任何产品数据。产品中是否只有一个记录?如果它们是多个记录,它们与购买有何关系?请提供两个表的结构。
+----------+------------+-------+
| 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,products 
WHERE purchases.time < products.time order by purchases.time desc limit 3) temp) as
av_price from products products