Chcę jednej tabeli o najwyższym BID i najniższym ASK (cena) dla każdego EntityCode w db.
Następujące dwa zestawy kodu zwracają dwa zestawy wyników, ale nie mogę jeszcze znaleźć / dowiedzieć się, jak dołączyć do nich:
Zdobądź najwyższą ofertę
(SELECT * FROM
(SELECT
Contracts.Orders2Buy.EntityCode,
Contracts.Orders2Buy.Bid,
Contracts.Orders2Buy.NumContractsStillAvailable,
Contracts.Orders2Buy.TimePlaced,
RANK() OVER (PARTITION BY EntityCode
ORDER BY Contracts.Orders2Buy.Bid DESC,
Contracts.Orders2Buy.TimePlaced DESC) AS Rank
FROM
Contracts.Orders2Buy
WHERE
Contracts.Orders2Buy.NumContractsStillAvailable > 0) AS temp
WHERE temp.Rank = 1)
Zdobądź najniższy Ask
(SELECT * FROM
( SELECT
Contracts.Orders2Sell.EntityCode,
Contracts.Orders2Sell.Ask,
Contracts.Orders2Sell.NumContractsStillAvailable AS AskVolume,
Contracts.Orders2Sell.TimePlaced,
RANK () OVER ( PARTITION BY EntityCode
ORDER BY Contracts.Orders2Sell.Ask ASC,
Contracts.Orders2Sell.TimePlaced DESC) AS Rank
FROM
Contracts.Orders2Sell
WHERE
Contracts.Orders2Sell.NumContractsStillAvailable > 0) AS temp2
WHERE temp2.Rank = 1)
Odpowiedzi:
0 dla odpowiedzi № 1Zamiast UNION, użyj JOIN, aby połączyć trzy zestawy wyników w jeden wynik.
SELECT *
FROM highestBid hb
JOIN lowestAsk la ON hb.stock_symbol = la.stock_symbol
JOIN mostRecent mr ON la.stock_symbol = mr.stock_symbol
umieścić potrzebne pola z każdego zestawu zamiast *
0 dla odpowiedzi nr 2
To, co chciałem osiągnąć, wymaga połączenia powyższych bloków kodu w następujący sposób:
SELECT * FROM
(Code block 1) t1
INNER JOIN
(Code block 2) t2
ON t1.EntityCode = t2.EntityCode