Я думаю, что вы просто ищете запись с максимальным значением для каждого убида:
select x.Ubid,x.Datum,x.username,x.name,x.Gewicht,x.Wiederholungen
from
(SELECT
a1.Ubid,
a3.Datum,
a4.username,
a2.Name,
Gewicht,
Wiederholungen,
row_number() over (partition by a1.ubid order by Gewicht desc) as rownum1
from satz a1
INNER JOIN ubungen a2 ON a1.UBID = a2.ID
INNER JOIN training a3 ON a1.TID = a3.ID
INNER JOIN user a4 ON a3.UID = a4.ID ) x
where x.rownum1=1
Я использовал функцию row_number, чтобы получить запись с наибольшим значением Gewicht. Надеюсь, это поможет.
Редактировать: добавив db-скрипку, в этом примере все работает нормально:
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=0ac9caf422a06feb6e7c05c1a68995f5
Поскольку row_number не равен работая, вы можете использовать внутреннее соединение, чтобы получить максимальное значение:
select x.Ubid,x.Datum,x.name,x.Gewicht,max(x.Wiederholungen) as Wiederholungen,max(x.username) as username
from
(SELECT
a1.Ubid,
a3.Datum,
a4.username,
a2.Name,
a1.Gewicht,
a1.Wiederholungen
from satz a1
INNER JOIN ubungen a2 ON a1.UBID = a2.ID
INNER JOIN training a3 ON a1.TID = a3.ID
INNER JOIN user a4 ON a3.UID = a4.ID ) x
INNER JOIN
(select ubid,max(Gewicht) as max_Gewicht from satz group by ubid) y
ON x.ubid=y.ubid and x.Gewicht=y.max_Gewicht
Group by x.Ubid,x.Datum,x.name,x.Gewicht