0

私は 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

ネストされたクエリで単純な間違いを犯しているのか、それともまったく間違った方法でこれを行っているのか、結合やその他の構造を使用する必要があるのか​​ 、どちらにしても行き詰まっているのかわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

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
于 2012-05-30T22:19:13.447 に答える