Höchster Wert bei Mehrfacheinträgen

Nobima

Benutzer
Beiträge
9
Guten Tag,
Ein Tabelle mit zwei Feldern soll abgefragt werden. Den Angaben in Feld 1 sind Werte zugeordnet, die in Feld 2 stehen. Die Angaben in Feld 1 können mehrfach vorhanden sein, aber unterschiedliche Werte in Feld 2 haben. Als Ergebnis der Abfrage sollen nur die Angaben aus Feld 1 gezeigt werden, die den höchsten Wert in Feld 2 haben.

Ist:
A-5
B-3
C-4
B-2
D-1
B-4

Soll:
A-5
B-4
C-4
D-1


Vielen Dank für einen Tip !
 
Werbung:
Entsprechend Deines Hinweises funktioniert folgende Abfrage:

SELECT bearbeitungsstand.Mitarbeiter_Id, themen.Thema_Nr, bearbeitungsstand.Stand, MAX(bearbeitungsstand.Jahr)
FROM bearbeitungsstand INNER JOIN themen ON bearbeitungsstand.Thema_Id = themen.Themen_Id
WHERE bearbeitungsstand.Stand='erledigt' AND bearbeitungsstand.Mitarbeiter_Id = 31
GROUP BY themen.Thema_Nr

Wobei Feld 1 = themen.Thema_Nr und Feld 2 = bearbeitungsstand.Jahr.

Zwischenzeitlich hatte ich auch folgende (recht unübersichtliche) Abfrage anhand von Foren-Einträgen
zusammengebastelt:

SELECT a.Mitarbeiter_Id, c.Thema_Nr, a.Stand, a.Jahr
FROM bearbeitungsstand a INNER JOIN themen c ON a.Thema_Id = c.Themen_Id
WHERE a.Stand='erledigt' AND a.Mitarbeiter_Id = 31
AND a.Jahr = (
SELECT MAX(b.Jahr)
FROM bearbeitungsstand b INNER JOIN themen d ON b.Thema_Id = d.Themen_Id
WHERE c.Thema_Nr = d.Thema_Nr
)

Deine Lösung gefällt mir jedoch viel besser !
 
Entsprechend Deines Hinweises funktioniert folgende Abfrage:

SELECT bearbeitungsstand.Mitarbeiter_Id, themen.Thema_Nr, bearbeitungsstand.Stand, MAX(bearbeitungsstand.Jahr)
FROM bearbeitungsstand INNER JOIN themen ON bearbeitungsstand.Thema_Id = themen.Themen_Id
WHERE bearbeitungsstand.Stand='erledigt' AND bearbeitungsstand.Mitarbeiter_Id = 31
GROUP BY themen.Thema_Nr

Das ist allerdings fehlerhaft. Alle (!) Spalten des Resultates müssen entweder aggregiert oder gruppiert werden. Das ist bei Dir nicht der Fall. Du erhälst mehr oder weniger ein zufälliges Ergebnis. Ab MySQL 5.7 sowie in allen anderen richtigen Datenbanken dieser Welt wird obige Abfrage schlicht und ergreifend einen Syntaxfehler bringen, mehr nicht.

Um das mal zu zeigen:

Code:
mysql> select * from tooore;
+---------+-------+------+
| spieler | spiel | tore |
+---------+-------+------+
| max  |  1 |  4 |
| max  |  2 |  3 |
| max  |  3 |  6 |
| lutz  |  1 |  6 |
| lutz  |  2 |  8 |
+---------+-------+------+
5 rows in set (0.05 sec)

mysql> select spieler, spiel, max(tore) from tooore group by spieler;
+---------+-------+-----------+
| spieler | spiel | max(tore) |
+---------+-------+-----------+
| lutz  |  1 |  8 |
| max  |  1 |  6 |
+---------+-------+-----------+
2 rows in set (0.04 sec)

Lutz hat in Spiel 2 seine 8 Tore gemacht, max in Spiel 3. Es wird aber falsch angezeigt, daß es in Spiel 1 gewesen wäre. Das ist schlicht und einfach Müll.
 
Werbung:
Zurück
Oben