2012-05-30 65 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 –