データベースに 2 つのテーブルがあります。
表1: 購入アイテム
Item | Qnt | Rate |Total
Meat | 1 | 20 | 20
Fish | 0.5 | 30 | 15
Chicken|1 | 25 | 25
Meat | 2 | 20 | 40
Table2: Trading Price
Item | Datetime | Price
Meat | 2013-02-20 10:00:00 | 20
Meat | 2013-02-20 09:00:00 | 18
Meat | 2013-02-19 08:00:00 | 21
Fish | 2013-02-19 09:00:00 | 15
Fish | 2013-02-19 08:00:00 | 17
Chicken|2013-02-20 09:00:00|26
Chicken|2013-02-20 08:00:00|25
表 1 には購入したアイテムがリストされ、表 2 には各アイテムの現在の価格が 1 時間ごとに更新されます。したがって、表 2 から、肉が最後に取引されたのは 2013 年 2 月 20 日午前 10 時であることがはっきりとわかります。一方、魚は同じ日に取引されたのではなく、2013 年 2 月 19 日に午前 9 時に取引され、鶏肉は次の日に取引されました。 2013 年 2 月 20 日午前 9 時。私がやりたいことは、テーブル 1 のすべてのアイテムをリストし、テーブル 2 のそれぞれのアイテムの最後の取引価格を結合すると、次のようになります。
Output:
Item | Qty | Total | Last Trade Price
Meat | 1 | 20 | 20
Meat | 2 | 40 | 20
Fish | 0.5 |15 | 15
Chicken|1 |25 |26
望ましい出力を得るには、どのタイプの結合とどの節をここで適用する必要がありますか? 私はこのクエリを試してみました: SELECT p.Item, p.Qnt l.price FROM Table1 as p INNER JOIN Table2 as l ON p.Item=l.Item WHERE l.Datetime=(SELECT max(Datetime) FROM Table2); しかし、このクエリでは、アイテムごとに最大日時が同じではないため、目的の結果が得られません。そのため、アイテムが出力から欠落しています。
では、上記の出力を取得するには、WHERE 句でどの結合タイプとどの条件を適用する必要がありますか?