PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Groupe by und verschiedene Zeilen


Generator
25.01.2006, 19:44:53
Dieser Selekt:
SELECT
Name,
sysx,
sysy,
slot,
MAX(datum_akt)
FROM
Tabelle
GROUP BY
sysx,
sysy,
slot
ORDER BY
sysx,
sysy,
slot


hat bei mir Folgendes Problem:

Inhalt von Tabelle:
id Datum Name sysx sysy slot
1 2006-01-16 22:07:28 Sphere -21 -21 1
2 2006-01-25 18:51:28 Zack -21 -21 1
3 2006-01-25 18:59:15 Hallo -21 -21 1

Der Selekt sollte mir den neuseten Eintrag bringen also:
=> 2006-01-25 18:59:15 Hallo -21 -21 1

Tut er aber nicht. Stattdessen kommt Mischmasch der verschiedenen Zeilen. Genauer:
id Datum Name sysx sysy slot
1 2006-01-25 18:59:15 Sphere -21 -21 1
Also den Namen und die ID des ersten Eintrages und das Datum des letzten.

Herauskommen sollte aber
id, Datum, Name des neuesten Eintrags also:
3 2006-01-25 18:59:15 Hallo -21 -21 1

xabbuh
25.01.2006, 20:06:58
Den neuesten Eintrag bekommst du mit ORDER BY Datum DESC LIMIT 1.

Generator
26.01.2006, 10:33:57
Den neuesten Eintrag bekommst du mit ORDER BY Datum DESC LIMIT 1.

Hmmm...ich glaube das ist ein Mißverständniss. Die Tabelle hat natürlich noch tausende von Anderen Einträgen(ich habe es nur wegen der Einfachheit auf 3 reduziert)

Und ich will den neuesten(und nur den neuesten) Eintrag von allen Koordinaten(sysx,sysy) haben. Wenn ich "ORDER BY Datum DESC LIMIT 1" benutze bekomme ich nur eine Zeile zurück. Ich will aber eine Zeile für jede sysx/sysy kombination die in der Tabelle ist.

xabbuh
26.01.2006, 11:41:30
Dann solltest du deine Abfrage verwenden. Einzig den Namen müsstest du über eine Unterabfrage ermitteln, da MySQL nicht wissen kann, aus welchem der betroffenen Datensätze du letztendlich diesen haben möchtest.

Generator
26.01.2006, 15:08:17
Dann solltest du deine Abfrage verwenden. Einzig den Namen müsstest du über eine Unterabfrage ermitteln, da MySQL nicht wissen kann, aus welchem der betroffenen Datensätze du letztendlich diesen haben möchtest.

hmmm...

...leider ist eine Subquery abartig langsam da sie ja für jeden Datensatz eigens ausgeführt wird und im Echtbetrieb in der Tabelle einige 10000 Einträge sind.

Es muß da doch einen schnelleren Weg geben da die Zeile die ich zurückwill ja schon durch das MAX() bekannt ist.

xabbuh
26.01.2006, 17:02:18
...leider ist eine Subquery abartig langsam da sie ja für jeden Datensatz eigens ausgeführt wird und im Echtbetrieb in der Tabelle einige 10000 Einträge sind.
Ein Index sollte die Abfrage dann enorm beschleunigen.