eine "distinct" verbinden mit MySQL machen Ich habe zwei MySQL-Tabellen (Produkt- und Preisentwicklung), die ich anschließen möchte:Wie
Product
Tabelle:
Id = int
Name = varchar
Manufacturer = varchar
UPC = varchar
Date_added = datetime
Price_h
Tabelle:
Id = int
Product_id = int
Price = int
Date = datetime
ich kann eine einfache LEFT JOIN ausführen:
SELECT Product.UPC, Product.Name, Price_h.Price, Price_h.Date
FROM Product
LEFT JOIN Price_h
ON Product.Id = Price_h.Product_id;
Aber wie erwartet, wenn ich mehr als einen Eintrag für ein Produkt in der Preisverlaufstabelle habe, bekomme ich ein Ergebnis für jeden historischen Preis.
Wie kann ein Join strukturiert werden, der nur eine Instanz jedes Produkts mit nur dem neuesten Eintrag aus der ihm zugeordneten Preisverlaufstabelle zurückgibt?
+1: Es sollte schneller sein als meins. Obwohl längerer Code. – a1ex07
Ich verstehe, warum Sie sagen, es sollte schneller sein, aber ich muss noch einen Umstand finden, wo es ist. Ich denke, dass es etwas mit der großen Anzahl von Datensätzen zu tun hat, die ich in der Preisverlaufstabelle (3.5M) habe. Vielleicht würde es helfen, wenn ich der Spalte Price_h.date einen Index hinzufügen würde? –
Es scheint, dass diese Abfrage ungefähr die gleiche Menge an Zeit benötigt, egal wie viele Ergebnisse sie zurückgibt, während die Abfrage von a1ex07 bei erhöhten Ergebnissen länger dauert als erwartet. Ich war nur ein wenig überrascht darüber, wie langsam dies für kleine Ergebnismengen ist und wie schnell die Lösung von a1ex07 für die gleichen kleinen Ergebnisse ist. Da ich in der "realen Welt" mit ziemlich großen Ergebnismengen arbeiten werde, habe ich dies als Antwort gewählt. –