我的数据库中有两个表:
表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的更新以及每个物品的当前价格。因此,从表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子句中应用以获得上述输出?
答案 0 :(得分:0)
尝试此查询:
SELECT p.Item, p.Qnt, LatestPriceTable.price FROM Table1 as p
INNER JOIN
(SELECT Table2.Item, Table2.Price FROM Table2 INNER JOIN
(SELECT Item, MAX(DateTime) FROM Table2
GROUP BY Item) AS A ON Table2.Item = A.Item) AS LatestPriceTable
ON p.Item=LatestPriceTable.Item
最内层的查询SELECT Item, MAX(DateTime) FROM Table2 GROUP BY Item
将为每个DateTime
输出最新的Item
。我们将此结果称为A.现在,我们使用Table2加入A,以获取最新日期的Price
列值。结果表名为LatestPriceTable,仅包含项目名称和最新价格。现在,您只需将其与Table1连接即可进行计算。
我确实感觉你设计的系统可能不足以满足你想要实现的目标。它是一种库存类型的应用程序吗?我看到的问题是,您总是将当前库存量与最新市场价格相乘。实际上,该股票几乎总是包含不同日期和不同价格的购买。
但话又说回来,我不确定你的确切目的,所以也许你可以忍受你正在做的事情。