MySQL - Distinct + Group By über 3 Tabellen

schamahn

Grünschnabel
Hi,

ich hab folgendes Problem vor dem ich schonr echt lange sitze:

Es gibt 3 Tabellen:

1. bt_tankstelle
beinhaltet Angaben zu einer Tankstelle

2. bt_sprit_avail
beinhaltet 3 Felder: id | tankstelle | kraftstoff
tankstelle=int id der bt_tankstelle
kraftstoff= int id von einer anderen tabelle in der
alle Kraftstoffe stehen.

In der Tabelle wird vermerkt, welcher Kraftstoff an
welcher Tankstelle vorhanden ist. Jeder Eintrag wird mit
einer unique ID versehen.

3. bt_entry
beinhaltet Preis-Angaben mit Bezug auf 2. / 3.
id | price | doc

id=int id des Eintrages in bt_sprit_avail
price=int aktueller Preis des Eintrages
doc=int timestamp des Eintrages (date of create)

In bt_entry wird jeden Tag eingetragen, welcher Preis
zu welcher Sprit->Tankstellen Zuordnung (bt_sprit_avail)
aktuell ist.


Bei einer Abfrage wird folgendes geschehen:

Select Tankstelle XY mit den Kriterien plz='xxx', Schaue welche Sprit-Arten vorhanden sind und selektiere aus bt_entry den entsprechenden Preis-Eintrage, ABER: nur den aktuellsten (mit dem größten doc)

Rückgabe für z.B. Sprit = Benzin (id=4
Tankstelle | preis | doc

Im Grunde läuft es SQL technisch so ab:
SELECT
bla
MAX(bt_entry.doc)
FROM
bla
WHERE
bla
GROUP BY bt_entry.id

Ich habe nun folgende Query zusammengebastelt, wobei hier folgendes Problem auftaucht, und die wäre dann auch meine Frage :-)

Es wird nur 1 Eintrag jeweils selektiert. Es wird auch der größte "doc" gewählt, aber: es werden nicht die Daten (preis) der Zeile auf bt_entry selektiert, die den größten doc besitzt:

SELECT
DISTINCT bt_entry.id,
bt_entry.price,
bt_entry.doc,
bt_tankstelle.name

FROM
bt_tankstelle,
bt_sprit_avail,
bt_entry

WHERE
bt_tankstelle.aktiv='1' AND
bt_tankstelle.ort='Aachen' AND
bt_sprit_avail.kraftstoff='2' AND
bt_sprit_avail.tankstelle=bt_tankstelle.id AND
bt_entry.id=bt_sprit_avail.id

GROUP BY
bt_entry.id

ORDER BY
bt_entry.doc

DESC LIMIT 0,100


Vielleicht ist ja für jemanden schnell ersichtlich was falsch ist, würde mich freuen, wenn mir jemand helfen könnte.

Vielen Dank,

schamahn
 
Hi,

wenn Du den Group by Befehl hast, brauchst DU das DISTINC nicht mehr, da sowieso jeder Treffer nur einmal ausgegeben wird. Also einfach DISTINC weglassen.

tüs
Michael
 
Zurück