Nach SQL Return every row even if Null values muss ich die Zeilendaten auswählen, die mit MAX (contractPrice) verknüpft sind, wenn sie nach zwei Spalten gruppiert sind.SQL Zeilenwerte für MAX() erhalten, gruppiert nach 2 Spalten
Ich habe sqlfiddle.com/#!6/170043/2 eingerichtet, um zu demonstrieren, dass das Problem der Code unten ist, der Duplikate zurückgibt (siehe 5. und 6. Zeile der sqlifiddle-Ergebnisse), wenn der maximale Preis wiederholt wird.
SELECT
t1.MeasurableID,
t1.EntityID,
t1.ContractPrice,
ID,
UTCMatched,
NumberOfContracts,
CurrencyCode
FROM
contracts AS t1
INNER JOIN (
SELECT
MeasurableID,
EntityID,
MAX (contractprice) AS MAXprice
FROM
contracts
WHERE
MeasurableID IN (2017, 2018)
AND CurrencyCode IN ('CAD', 'BTC')
GROUP BY
MeasurableID,
EntityID
) t2 ON t1.MeasurableID = t2.MeasurableID
AND t1.EntityID = t2.EntityID
AND t1.ContractPrice = t2.MAXprice
WHERE
t1.MeasurableID IN (2017, 2018)
AND t1.CurrencyCode IN ('CAD', 'BTC')
ORDER BY
MeasurableID,
EntityID,
UTCMatched
1.) Leider mein Fehler auf sqlfiddle hier ist Link für SQL-Server http://sqlfiddle.com/#!6/170043/ 2 2.) Ich werde Ihren Code versuchen und beraten, danke. –
Beachten Sie, dass Ihr erster Codeblock den Fehler auslöst: "Spalte 'contracts.UTCmatched' ist in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist." und dass, selbst wenn die letzten drei Auswahlen entfernt werden, die MAX (ID), die zurückgegeben wird, der höchste ID-Wert ist (und nicht der ID-Wert, der dem höchsten Preis zugeordnet ist). –
Ja, ich habe bemerkt, dass die Spalten richtig aggregiert werden müssen. Ich habe es aktualisiert, um zu reflektieren, was ich meine. Fahren Sie fort und führen Sie es erneut aus. – Simon