私は 2 つのテーブルを持っています。1 つは製品を含み、もう 1 つは購入です。各製品の過去 3 回の購入価格の平均を見つけようとしています。したがって、以下の例では、製品「豆」について、製品時間 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
ネストされたクエリで単純な間違いを犯しているのか、それともまったく間違った方法でこれを行っているのか、結合やその他の構造を使用する必要があるのか 、どちらにしても行き詰まっているのかわかりません。どんな助けでも大歓迎です。