/ / SQL Server Dołącz zapytania do rang i partycji - serwer sql, ranga, partycja

SQL Server Dołączaj zapytania za pomocą rangi i partycji - serwer sql, ranga, partycja

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 № 1

Zamiast 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