Ausgabe der Rows mit höchstem Wert X einer Gruppe y,z ?

mfernau

Bekanntes Mitglied
Hallo Leute,

ich stehe gerade auf dem Schlauch und habe mir hier mittlerweile ein Query aufgebaut bei dem ich nicht mehr durchblicke :)

Simples Beispiel.

Gegeben sein folgende Tabellen `service` `service_version`
Tabelle service:
Code:
+----++-----+
| id | name |
+----++-----+

Tabelle service_version
Code:
+----++------+------+-----------+-----------+-------------+
| id | build | beta | api_major | api_minor | downloadURL |
+----++------+------+-----------+-----------+-------------+

Außer 'name' und downloadURL (varchar) sind alle Columns int

Es geht hierbei um eine Datenbank die Versionsinformationen von Plugins zu einem Server hält.
Was ich nun gerade suche ist ein Select-Statement, dass mir nur eine Row pro Gruppierung aus api_major, api_minor und build für ein bestimmten Service ausgibt. Und zwar die Zeile mit dem höchsten build.

Naiv könnte man jetzt folgendes tun:
SQL:
SELECT * 
  FROM 
    `service` 
  NATURAL LEFT JOIN 
    `service_version`
  GROUP BY api_major, api_minor, beta

Als Ergebnis kommt dabei so etwas heraus:
Code:
+---------------+-------+------+-----------+-----------+
| id | name     | build | beta | api_major | api_minor |
+---------------+-------+------+-----------+-----------+
| 1  | Service1 | 4     | 0    | 1         | 0         |
| 1  | Service1 | 1     | 1    | 1         | 0         |
| 1  | Service1 | 6     | 1    | 1         | 1         |
| 1  | Service1 | 8     | 1    | 2         | 0         |
+---------------+-------+------+-----------+-----------+

Aber das Ergebnis von group by ist nicht sortiert. Group by liefert mir irgend eine Zeile für eine Gruppe - nicht notwendigerweise die mit dem höchsten build. Eher sogar das Gegenteil. Z.b. gibt es die build-Version 9 für die Gruppe mit beta == 1, api_major == 2 und api_minor == 0

Wie baut man so ein Select bei dem man nur eine bestimmte Zeile einer Gruppe bekommt? Evtl sehe ich auch den Wald vor lauter Bäumen nicht mehr...

Besten Dank und viele Grüße,
Martin
 
Zuletzt bearbeitet:
G

Gast2

Gast
Bau doch einfach noch einen Select drum rum?

*untested*
SQL:
SELECT * FROM (
SELECT * 
  FROM 
    `service` 
  NATURAL LEFT JOIN 
    `service_version`
  GROUP BY api_major, api_minor, beta
) ORDER BY build LIMIT 1

Oder so...
 

mfernau

Bekanntes Mitglied
Das hätte keinen Effekt - Das Problem ist doch dass Group By eigentlich für Gruppenoperatoren wie sum, max und so weiter benutzt wird. Wenn aber kein solcher Operator für eine Spalte einer Group By Klausel verwendet wird ist das Ergebnis undefiniert.
Group by liefert dann also irgend eine Zeile dieser Gruppe.
was maximal ginge wäre sowas hier
SQL:
SELECT * 
  FROM 
    `service` 
  NATURAL LEFT JOIN 
    (select * from service_version order by build desc) service_version
  GROUP BY api_major, api_minor, beta

Aber so richtig gefallen will mir das mit den Subselects und der vergewaltigten group by klausel nicht. Denn das hier ist nur ein Beispiel - diese Abfrage die ich hier suche ist integriert in einer anderen abfrage die sich zusammensetzt aus allen installierten services. Der Aufwand solcher Abfragen steigt also Quadratisch
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Das printen der Ausgabe des Oracle-SQL-Statements in der Java-Eclipse-Konsole funktioniert nicht Datenbankprogrammierung 6
nikgo Java SQL Ausgabe in Liste o.ä. abspeichern um mit dem Ergbnis "zu arbeiten"? Datenbankprogrammierung 5
Z Ausgabe nur bestimmter Daten Datenbankprogrammierung 6
L MySQL Vergleichen von Array-Inhalt, Ausgabe gleicher Daten Datenbankprogrammierung 3
W MySQL Ausgabe von Datenbank in Java-App Datenbankprogrammierung 6
S Hibernate-Konfiguration : Unverständliche Ausgabe beim Ausführen Datenbankprogrammierung 0
I Fehler bei Ausgabe der Daten aus der DB Datenbankprogrammierung 3
F Komplexer Tabellen-Join und Ausgabe in Excel Datenbankprogrammierung 17
C HSQLDB Leerzeichen in Ausgabe Datenbankprogrammierung 4
M Ausgabe in Tabelle der MySQL-Datenbank mit Java Datenbankprogrammierung 4
Z [ORACLE] Ausgabe Tabelle im GUI Datenbankprogrammierung 4
D Keine Ausgabe der Daten Datenbankprogrammierung 3
S problem mit mysql ausgabe. Datenbankprogrammierung 3
S Ausgabe von Tabellendaten auf der heimischen Konsole ;) Datenbankprogrammierung 5
G Aktualisierung Access-DB soll Ausgabe aktualisieren Datenbankprogrammierung 3
D result ausgabe in Html Tabelle Datenbankprogrammierung 10
M Oracle String aus Column splitten und x Rows daraus erstellen Datenbankprogrammierung 1
S MySQL Rows zählen? Datenbankprogrammierung 5
M Designfrage zu Rows die sich auf einen Datensatz derselben Tabelle beziehen Datenbankprogrammierung 7
J MySQL Löschen von Rows mit JDBC Datenbankprogrammierung 9

Ähnliche Java Themen

Neue Themen


Oben