Mysql: Durchschnitt der letzten x Einträge von einem User

Markus79

Grünschnabel
Hallo zusammen,
ich hänge gerade bei einer Abfrage fest und weiß einfach nicht mehr weiter. In der Suche habe ich nichts gefunden, oder aber ich bin einfach schon blöd inne Birne :D

Ich habe eine Tabelle mit den Spalten:
| userid | wert | datum

Hier möchte ich jetzt den Durchschnitt des Wertes der letzten 7 Einträge von User X errechnen lassen.
PHP:
SELECT AVG(wert) FROM tbl
WHERE tbl.id_user = $userid

Das errechnet mir zwar den Durchschnitt, aber von allen Einträgen. Ich will jedoch nur die letzten x haben. Mit ORDER BY und LIMIT habe ich schon versucht, aber ohne erfolg.

Kann mir da vielleicht einer auf die Sprünge helfen?

Gruss Markus
 
Hallo,
SQL:
SELECT AVG(wert) FROM tbl 
WHERE tbl.id_user = $userid ORDER BY ASC LIMIT 7
sollte eig. funktionieren.
Was kommt denn für eine Fehlermeldung?

Viele Grüße
 
Zuletzt bearbeitet von einem Moderator:
@Splater:
1. Dein Code kann nicht das gewünschte Ergbenis bringen, weil die LIMIT-Klausel hier überhaupt nicht greift. Und ausserdem sollen die LETZTEN 7 Einträge zur Auswertung herangezogen werden -> folglich nimmt man dann wohl eher DESC in der Sortierung als ASC...
2. Was für eine Fehlermeldung sollte der TE denn bekommen? Es gibt keine, weil seine Abfrage syntaktisch korrekt ist...

So wäre eine korrekte Abfrage:
Code:
SELECT AVG(t.wert)
	FROM
		(SELECT wert
				FROM tbl
				WHERE id_user=$userid
				ORDER BY wert DESC 
				LIMIT 7 
		) AS t

Zunächst werden im inneren SELECT die letzten 7 Datensätze geholt, in dem die 'Zwischentzabelle' absteigend sortiert wird und auf 7 Reihen beschränkt wird.
Im zweiten Schritt wird dann der Durchschnitt aus der 'Zwischentabelle' t berechnet.
 
Hallo,
vielen Dank für die Antwort und der Erklärung. Ich weiß schon warum ich hier solange registriert bin, aber nie fragen musste :D. Die Suche brachte bis jetzt immer die gewünschten Ergebnisse.

Vielen Dank noche einmal

Gruss Markus
 
Jo, büdde:)

Mir ist da grad noch was ein- bzw aufgefallen:
ORDER BY wert DESC
ist zwar an sich richtig von der Syntax her.
Logisch gesehen sollte das Sortierfeld eindeutig sein; will sagen: wenn die letzten Einträge eines Users gesucht werden sollen, dann wäre z.B. ein Datumsfeld sinnvoller-weil: hier kann der Eintrag eines Users mit einem 'Zeitstempel' versehen werden.
Oder jeder Eintrag erhält intern eine eindeutige ID (AUTOINCREMENT)...
 
Hi
Das hatte ich mir auch schon überlegt. Die Spalte Datum wird mittels das jquery Date/Timepicker gefüllt und hat das Format "tt.mm.jj um hh:mm".
Ein Timestamp habe ich auch mit drinne, wird aber bei dieser Abfrage nicht benötigt. Ehr halt das Feld Datum mit dem genannten Format. Da bin ich jetzt gerade dran bei einer anderen Abfrage ;)

Vielen dank für deine Bemühung :up:
 

Neue Beiträge

Zurück