MySQL嵌套查询
我有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
我不知道如果我正在与嵌套查询一个简单的错误,不然我在完全错误的方式去这件事,应该使用连接或其它一些结构,无论哪种方式,我卡住了。任何帮助将得到很好的接收。
您的查询中唯一的问题是您在内部查询中没有提及产品表。
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
http://sqlfiddle.com/#!2/45284/5 –
您的意思是“产品时间1230854764之前的最后3个采购价格的平均值”?不,这也没有意义。我对你的时间价值感到困惑,他们是否正确? – Jared
您的表格结构没有标准化。 “购买”没有任何产品数据。 – Tony
“产品”中是否只有一条记录?如果他们是多个记录,他们与“采购”有什么关系? – eggyal