Alle Artikel die am MAX(datum) den MAX(preis) haben

Tommy57

Erfahrenes Mitglied
Hi,

steh grad irgendwie auf dem Schlauch. Es geht um eine Datenbank mit Auktionsdaten. Ich möchte gerne wissen, welche Artikel das letzte Mal wo sie gehandelt wurden einen Höchstpreis erzielt haben. Postgres oder MySQL ist egal

id, id_article, datum, preis
1, 1, '2015-04-20', 190
2, 1, '2015-04-21', 187
3, 1, '2015-04-23', 195
4, 1, '2015-04-23', 180
5, 1, '2015-04-23', 192
6, 2, '2015-04-20', 25
7, 2, '2015-04-22', 18
8, 2, '2015-04-22', 19
9, 2, '2015-04-22', 21

Die Abfrage müsste mir als Resultat id = 3 liefern

Gruß, Tommy
 
Hab es jetzt so gelöst:

Code:
SELECT
  x0.id_article,
  x0.max_preis,
  x0.max_datum
FROM
  (SELECT
      id_article,
      MAX(datum) AS max_preis,
      MAX(preis) AS max_datum
  FROM
      tb_auktion
  GROUP BY
      id_article) x0
INNER JOIN
  tb_auktion x1
ON
  (x1.id_article, x1.datum, x1.preis) = (x0.id_article, x0.max_preis, x0.max_datum)
GROUP BY
  x0.id_article,
  x0.max_preis,
  x0.max_datum;

Das INNER JOIN schaut, welche Zeilen das höchste Datum und den höchsten Preis haben und mit dem GROUP BY am Ende verhinder ich doppelte Zeilen, falls mal ein der gleiche Höchstpreis mehr als einmal erzielt wurde.
 
Zurück