MYSQL-запрос на возврат значения с наибольшим увеличением цены за два дня - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть две таблицы:

ЦЕНА
дата тикера закрыта
AAPL 3/20/2019 $ 100
AAPL 21.03.2009 $ 101.5
AAPL 3/22/2019$ 106,5
GOOG 3/20/2019 $ 100
GOOG 3/21/2019 $ 130
GOOG 22.03.2009 $ 110
MSFT 3/03/2019 $ 184,5
MSFT 3/03/2019$ 188,5
MSFT 22.03.2009 $ 210
IBM 3/03/2019 $ 72
IBM 3/21/2019 $ 70
IBM 3/22/2019 $ 10

STOCK
обмен тикерами
AAPL NASDAQ
GOOG NASDAQ
MSFT NASDAQ
IBM NYSE

, и я хочу вернуть тикер, который находится в 'NYSE' сНаибольший рост цены закрытия с 2019-03-20 до 2019 03-21.У меня есть:

SELECT DISTINCT T.ticker 
FROM PRICE T 
WHERE T.ticker IN SELECT D1.ticker, MAX(D1.close-D2.close) 
                  FROM PRICE D1, PRICE D2, STOCK S 
                  WHERE S.exchange='NYSE' AND D1.date = '2019-03-21' AND D2.date = '2019-03-20' AND D1.ticker = D2.ticker GROUP BY D1.ticker) 
GROUP BY T.ticker;

Но он возвращает 'ОШИБКА 1064 (42000): у вас ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'SELECT D1.ticker, MAX (D1.close-D2.close) ОТ ЦЕНЫ D1, ЦЕНЫ D2, СТОК S ГДЕ' в строке 1 '

IBM должна вернуться в качестве вывода, поскольку это единственный тикер на NYSE.

Я совершенно новичок в SQL, и мы будем благодарны за любые предложения:)

1 Ответ

0 голосов
/ 07 апреля 2019

Использовать самостоятельное соединение:

select p1.ticket
from price p1 join
     price p2
     on p1.ticker = p2.ticker and
        p1.date = '2019-03-20' and
        p2.date = '2019-03-21'
order by p2.price - p1.price desc
limit 1;

Вам нужно только от join до stock, если вам нужен обмен (который ваш запрос предлагает, но объяснение не упоминает):

select p1.ticket
from price p1 join
     price p2
     on p1.ticker = p2.ticker and
        p1.date = '2019-03-20' and
        p2.date = '2019-03-21' join
     stock s
     on p1.ticker = s.ticker
where s.exchange = 'NYSE'
order by p2.price - p1.price desc
limit 1;
...