Entwickler-Ecke

Datenbanken - Aus mehreren Datensätzen nur aktuellsten Auslesen


FinnO - Mo 26.09.11 18:20
Titel: Aus mehreren Datensätzen nur aktuellsten Auslesen
Moin,

ich bastel gerade an einer Datenbank. Dabei werden einem Produkt mehrere Preise an verschiedenen Daten zugeordnet. Das ganze schaut dabei ungefähr so aus:

Tabelle: articles

Quelltext
1:
2:
3:
4:
id - title
1  - Obst
2  - Gemüse
3  - Bratwurst


Tabelle: prices

Quelltext
1:
2:
3:
4:
id - article_id - date        - price
1  - 1          - gestern     - 27.99
2  - 1          - heute       - 28.99
3  - 2          - heute       - 12.99


Ich möchte jetzt bei einer kompletten Auflistung aller Artikel zu jedem Artikel nur den aktuellsten Preis anzeigen.

Also in diesem Fall zum Artikel 1 nur den Preis 28.99 ausgeben, nicht den Preis 27.99.

Ist das möglich? Und wenn ja, wie?


BenBE - Mo 26.09.11 18:43


SQL-Anweisung
1:
SELECT a.*, p.price FROM articles AS a INNER JOIN prices AS p ON a.id = p.article_id, prices AS p2 WHERE p.id = MAX(p2.id) GROUP BY p2.article_id                    


Wenn ich mich grad nicht vertan hab.


FinnO - Mo 26.09.11 18:48

Moin,

PMA markiert MAX rot und behauptet invalid Use of Group by...

Hmm..


FinnO - Mo 26.09.11 20:16

Moin,

Momentan bin ich so weit, dass ich schonmal das neuere der Daten angezeigt bekomme, nur nicht den zum Datensatz passenden Preis:


SQL-Anweisung
1:
SELECT MAX(p.`date`) AS date, p.`price` FROM `prices`  AS p GROUP BY `article_id`                    


liefert zwar als Datum "heute" aber noch als Preis 27.99 :(


FinnO - Mo 26.09.11 20:33

Moin,

zur Krönung nun ein Dreifachpost - Dank Bennys Hilfe habe ich fertig:


SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
SELECT p.price, p.date
FROM prices AS p
WHERE p.id
IN (
SELECT MAX( p.id )
FROM prices AS p
GROUP BY p.article_id
)