2012-05-30 64 views
0

我有2个表,其中一个包含产品,一个购买。我试图找出每种产品最近3次采购价格的平均值。因此,在下面的例子中,对于产品“豆”我希望产品的时候1230854663之前返回的最后3种购买的平均价格,即用户C,d,E(239)MySQL嵌套查询

产品的平均

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

购买

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

,我想出了一个嵌套select查询,几乎让我有,即它的工作原理,如果我硬编码的时间:

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

我不知道如果我正在与嵌套查询一个简单的错误,不然我在完全错误的方式去这件事,应该使用连接或其它一些结构,无论哪种方式,我卡住了。任何帮助将得到很好的接收。

+0

您的意思是“产品时间1230854764之前的最后3个采购价格的平均值”?不,这也没有意义。我对你的时间价值感到困惑,他们是否正确? – Jared

+0

您的表格结构没有标准化。 “购买”没有任何产品数据。 – Tony

+1

“产品”中是否只有一条记录?如果他们是多个记录,他们与“采购”有什么关系? – eggyal

回答

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 
+1

http://sqlfiddle.com/#!2/45284/5 –