因此,我必须使用一个查询,在其中列出交易ID的股票ID,以及将总价格转换为美元的总价(最高价)。
SELECT
tr.trade_id, tr.stock_id, round(tr.price_total * con.exchange_rate,2)
as "US Dollars"
from trade tr
JOIN stock_exchange se
on se.STOCK_EX_ID = tr.STOCK_EX_ID
JOIN currency curr
on curr.CURRENCY_ID = se.currency_id
JOIN conversion con
on con.from_CURRENCY_ID = curr.CURRENCY_ID
WHERE (tr.PRICE_TOTAL) = (Select Max(price_total) from trade) and curr.name =
'Dollar' and tr.stock_ex_id is not NULL
group by tr.trade_id, tr.stock_id, round(tr.price_total), tr.price_total,
round(tr.price_total * con.exchange_rate,2);
交易(trade_id PK,stock_id FK2,transaction_time,股票,stock_ex_id FK1,总价格)
Stock-exchange( stock_ex_id PK, name, symbol, currency_id FK1)
conversion( from_currency_id PK, to_currency_id)
currency ( currency_id PK, name, symbol
expected output should be -
trade_id - 1 stock_id 1, price (non conversion) (225000000)
我不确定为什么在输出中什么也没得到。有什么建议可以解决这个问题吗?抱歉,如果我没有正确设置问题的格式
答案 0 :(得分:0)
但是您可以先查看您选择的最大查询返回的内容,然后根据该值过滤交易表。跟踪所有表,以查看交易表上的数据不在其他表上的位置。
或者将您的curr.name条件与联接放在一起,并为最后两个表指定LEFT JOIN,以查看数据是否丢失,如下所示:
SELECT tr.trade_id
,tr.stock_id
,round(tr.price_total * con.exchange_rate, 2) AS "US Dollars"
FROM trade tr
LEFT JOIN stock_exchange se
ON se.STOCK_EX_ID = tr.STOCK_EX_ID
LEFT JOIN currency curr
ON curr.CURRENCY_ID = se.currency_id
AND curr.name = 'Dollar'
LEFT JOIN conversion con
ON con.from_CURRENCY_ID = curr.CURRENCY_ID
WHERE (tr.PRICE_TOTAL) = (SELECT Max(trm.price_total) FROM trade trm)
AND tr.stock_ex_id IS NOT NULL
答案 1 :(得分:0)
也可能是其他事情,但是值得一看的是这个
您说WHERE tr.PRICE_TOTAL =(从交易中选择Max(price_total) AND curr.name ='美元'
如果最大价格总额的交易不是美元,那么您将一无所获。
您需要更改“从交易中选择最高价(总价)”以仅获取美元交易的最大值,或者在子查询中获取所有有效交易,然后从中获取最大值。
在下面的注释之后-调试-运行“从交易中选择*,其中price_total =(从交易中选择Max(price_total))”,以获取有效的交易记录。然后查看它们-它们将在某处失败-交易中没有STOCK_EX_ID,或者其他联接之一失败-您需要从已知数据开始然后从那里开始。