найти самую высокую общую цену и конвертировать - PullRequest
0 голосов
/ 29 июня 2018

Таким образом, я должен использовать запрос, в котором я перечисляю идентификатор акции торгового идентификатора и общую цену, конвертированную в доллары США, где это самая высокая общая цена.

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, транзакция_время, акции, stock_ex_id FK1, price_total)

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)

Я не уверен, почему в моем выводе я ничего не получаю. Любые предложения, чтобы это исправить? Извините, если я не отформатировал вопрос правильно

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Это могут быть и другие вещи, но нужно обратить внимание на это

Вы говорите, ГДЕ tr.PRICE_TOTAL = (Выберите Max (price_total) из сделки) AND curr.name = 'Dollar'

Если сделка с Maximum__total не в долларах, вы ничего не получите.

Вам нужно либо изменить «Выбрать максимум (price_total) из сделки», чтобы получить максимальные значения только для сделок с долларом, либо получить все действительные сделки в подзапросе, а затем получить максимальное значение из этого.


После комментария ниже - для отладки - запустите "Select * from trade, где price_total = (Выберите Max (price_total) from trade)", чтобы получить действительные торговые записи. Затем посмотрите на них - они где-нибудь потерпят неудачу - в торговле не будет STOCK_EX_ID или одно из других объединений завершится неудачно - вам нужно начать с известных данных и идти оттуда.

0 голосов
/ 29 июня 2018

Но вы могли бы начать с просмотра того, что возвращает ваш запрос select max, а затем отфильтровать таблицу торгов по этому значению. Проследите это, хотя все ваши таблицы, чтобы увидеть, где данные вашей торговой таблицы не находятся на других.

ИЛИ добавьте критерии currname для соединения и укажите 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...