簡體   English   中英

MYSQL查詢返回兩天之間價格漲幅最高的值

[英]MYSQL query to return the value with the highest price increase between two days

我有兩張桌子:

價錢
股票日期關閉
AAPL 3/20/2019 100美元
AAPL 3/21/2019 $ 101.5
AAPL 3/22/2019 $ 106.5
GOOG 3/20/2019 100美元
GOOG 3/21/2019 130美元
GOOG 3/22/2019 110美元
MSFT 3/20/2019 $ 184.5
MSFT 3/21/2019 $ 188.5
MSFT 3/22/2019 210美元
IBM 3/20/2019 $ 72
IBM 3/21/2019 70美元
IBM 3/22/2019 10美元

股票
股票交易所
AAPL納斯達克
GOOG納斯達克
MSFT納斯達克
IBM紐約證券交易所

我想要回到“紐約證券交易所”的股票代碼,收盤價從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;

但是它返回'ERROR 1064(42000):你的SQL語法有錯誤; 檢查與MySQL服務器版本對應的手冊,以便在'SELECT D1.ticker,MAX(D1.close-D2.close)從PRICE D1,PRICE D2,STOCK S'在第1行'附近使用正確的語法

IBM應該作為輸出返回,因為它是紐約證券交易所唯一的股票代碼。

我是SQL的新手,任何建議都會受到贊賞:)

使用自聯接:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM