Ich muss einen Join erstellen, der mir die neuesten Preis für jedes Produkt geben wird. Ich habe die Tabellenstrukturen für den Zweck des Beispiels stark vereinfacht, und jede Tabellenzeile zählt in Millionen. Meine vorherigen Stiche bei diesem waren nicht gerade sehr effektiv.postgres beitreten max Datum
0
A
Antwort
0
Der einfachste Weg, es wird mit der row_number
Funktion zu tun.
select p.name,t.amount as latest_price
from (select p.*, row_number() over(partition by product_id order by create_date desc) as rn
from prices p) t
join products p on p.id = t.product_id
where rn = 1
0
In PostgreSQL, könnten Sie DISTINCT ON
versuchen nur in absteigender create_date
, um die erste Zeile pro Produkt-ID zu erhalten;
SELECT DISTINCT ON (products.id) products.*, prices.*
FROM products
JOIN prices
ON products.id = prices.product_id
ORDER BY products.id, create_date DESC
(natürlich mit Ausnahme illustrativen Zwecken, sollten Sie die genauen Spalten natürlich wählen Sie benötigen)
http://meta.stackoverflow.com/questions/285551/why-may-i- nicht-upload-images-of-code-auf-so-wenn-eine-frage/285557 # 285557 –
Liegt die Frage daran, dass Sie Probleme beim Schreiben der Abfrage haben, um korrekte Ergebnisse zu erhalten? Oder dass Sie Probleme haben, die Abfrage effizient zu schreiben? –
@MarkHildreth Ich kann den ganzen Tag lang "funktionierende" Abfragen schreiben, solange der Datensatz klein ist. Sobald ich versuche, diese Unterabfrage-Joins auf meinen großen dbs auszuführen, gibt es nie Ergebnisse zurück. Also, ja, das Problem ist sicherlich Effizienz. – bopritchard