Ich habe Daten, die wie folgt aussehen:Wie verknüpfe ich die letzte Zeile in einer Tabelle mit einer anderen Tabelle?
entities
id name
1 Apple
2 Orange
3 Banana
In regelmäßigen Abständen wird ein Prozess ausgeführt und eine Punktzahl zu jeder Einheit geben. Der Prozess erzeugt die Daten und fügt sie zu einem Tisch Partituren wie so:
scores
id entity_id score date_added
1 1 10 1/2/09
2 2 10 1/2/09
3 1 15 1/3/09
4 2 10 1/03/09
5 1 15 1/4/09
6 2 15 1/4/09
7 3 22 1/4/09
ich alle Einheiten in der Lage sein wollen, wählen Sie zusammen mit den neuesten aufgezeichnet Punktzahl für jede in einigen Daten wie diese resultierende:
entities
id name score date_added
1 Apple 15 1/4/09
2 Orange 15 1/4/09
3 Banana 15 1/4/09
kann ich die Daten für eine einzelne Einheit erhalten diese Abfrage mit:
SELECT entities.*,
scores.score,
scores.date_added
FROM entities
INNER JOIN scores
ON entities.id = scores.entity_id
WHERE entities.id = ?
ORDER BY scores.date_added DESC
LIMIT 1
Aber ich bin ratlos, wie das gleiche für alle Objekte auszuwählen. Vielleicht starrt es mich an?
Vielen Dank, dass Sie sich die Zeit genommen haben.
Danke für die tollen Antworten. Ich werde es ein paar Tage geben, um zu sehen, ob eine bevorzugte Lösung aufbläht, dann wähle ich die Antwort aus.
UPDATE: Ich habe mehrere der vorgeschlagenen Lösungen ausprobiert, das Hauptproblem, mit dem ich es jetzt zu tun habe, ist, dass wenn eine Entität noch keinen generierten Score hat, sie nicht in der Liste erscheinen.
Wie sieht die SQL aus, um sicherzustellen, dass alle Entitäten zurückgegeben werden, auch wenn sie noch keine Punktzahl haben?
UPDATE: Antwort ausgewählt. Danke allen!
Dank Bill, habe ich mich letztendlich mit dieser Lösung begnügt, aber den INNER JOIN gegen einen LINKEN JOIN getauscht, um Entitäten einzubinden, die noch keine Scores haben. – GloryFish
Ich mag diese Lösung, ich benutze auch das LINKE JOIN. Wie würden Sie empfehlen, sich mit einem Gleichstand zu befassen, falls es zwei Punkte für dasselbe Unternehmen mit demselben Datum gibt? – russds
@russds, verwenden Sie eine andere Spalte, um Beziehungen zu lösen. –