Mysql Summe von Timediff fehlerhaft
Hallo eine Frage zum Thema mysql.
Gegeben sei eine Tabelle taetigkeiten:
id, startzeit, endzeit, kategorie. Id ist klar, start- und endzeit stehen Daten drin. Also zB
13;2021-11.10 11:15;2021-11.10 11:45;3
Nun möchte ich die Summe der Zeitdifferenzen mit der Kategorie 3 haben.
Also Ergebnis bekomme ich etwas mit 215000 Sekunden. Richtig wären 51300 Sekunden. Das Kuriose ist, wenn ich dasselbe ohne Summ mache:
wirft er mit die korrekten Sekunden raus. Im obrigen Beispiel halt 1800. Anderer Versuch:
Selber Fehler. Die Felder sind halt id=pk, taetigkeit_id=int, start- und endzeit datetime. Ich möchte halt Zeiten erfassen und die Differenzen als Summen ausgeben.
Also Kategorie 3: 12 h 45 Minuten, Kategorie 1: 124 h 15 Minuten usw.
Wo ist der Fehler? Was mich irritiert, die einzelnen Werte sind korrekt. Die Summe nicht? Ich kann es natürlich in php lösen, in der Schleife und dann per Arrays.
Aber es muss doch möglich sein in mysql zu rechnen...
Any idea
tsunami
Gegeben sei eine Tabelle taetigkeiten:
id, startzeit, endzeit, kategorie. Id ist klar, start- und endzeit stehen Daten drin. Also zB
13;2021-11.10 11:15;2021-11.10 11:45;3
Nun möchte ich die Summe der Zeitdifferenzen mit der Kategorie 3 haben.
SELECT sum(TIMESTAMPDIFF(SECOND,startzeit,endzeit)) as zeit,startzeit,endzeit from taetigkeiten order by startzeit
Also Ergebnis bekomme ich etwas mit 215000 Sekunden. Richtig wären 51300 Sekunden. Das Kuriose ist, wenn ich dasselbe ohne Summ mache:
SELECT TIMESTAMPDIFF(SECOND,startzeit,endzeit) as zeit,startzeit,endzeit from taetigkeiten where kategorie_id=3 order by startzeit
wirft er mit die korrekten Sekunden raus. Im obrigen Beispiel halt 1800. Anderer Versuch:
select SEC_TO_TIME(SUM(UNIX_TIMESTAMP(endzeit) - UNIX_TIMESTAMP(startzeit)))
from taetigkeiten where kategorie_id=3
Selber Fehler. Die Felder sind halt id=pk, taetigkeit_id=int, start- und endzeit datetime. Ich möchte halt Zeiten erfassen und die Differenzen als Summen ausgeben.
Also Kategorie 3: 12 h 45 Minuten, Kategorie 1: 124 h 15 Minuten usw.
Wo ist der Fehler? Was mich irritiert, die einzelnen Werte sind korrekt. Die Summe nicht? Ich kann es natürlich in php lösen, in der Schleife und dann per Arrays.
Aber es muss doch möglich sein in mysql zu rechnen...
Any idea
tsunami
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1466300952
Url: https://administrator.de/contentid/1466300952
Ausgedruckt am: 24.11.2024 um 05:11 Uhr
18 Kommentare
Neuester Kommentar
Dann fehlt da was:
SELECT sum(TIMESTAMPDIFF(SECOND,startzeit,endzeit)) as zeit,startzeit,endzeit from taetigkeiten order by startzeit
Das ist das, was Du hast. Da sagst Du ihm, er soll in jedem Datensatz alle Differenzen der Zeiten aufsummieren. Das gibt dann das viel zu große Ergebnis.
SELECT sum(TIMESTAMPDIFF(SECOND,startzeit,endzeit)), kategorie_id from taetigkeiten group by kategorie_id
sollte das richtige Ergebnis liefern. Siehe: https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html
Die Felder Start- und Endzeit kannst Du Dir dabei nicht ausgeben lassen, da die mehrdeutig sind und dann das group by nicht funktioniert.
hth
Erik
Zitat von @tsunami:
@erik Leider ein Satz mit x. Hinterher muss da ein group by rein, klar. Dann habe ich Fahrzeit, Kunde, Pause usw.
Zum Eingrenzen habe ich daher das reingenommen.
Damit er erstmal nur die Fahrzeiten rauswirft.
Ausgabe vom group by:
@erik Leider ein Satz mit x. Hinterher muss da ein group by rein, klar. Dann habe ich Fahrzeit, Kunde, Pause usw.
Zum Eingrenzen habe ich daher das
where kategorie_id=3
Damit er erstmal nur die Fahrzeiten rauswirft.
Ausgabe vom group by:
> 675000
> 252000 <- hier sollte 51300 stehen
> 23400
> 112500
Ich habe nicht wirklich verstanden, was Du jetzt probiert hast mit group by. Kannst Du mal die Statements komplett posten? <edit>Und ist nur der eine Wert falsch oder alle?</edit>
Zitat von @tsunami:
SELECT sum(TIMESTAMPDIFF(SECOND,startzeit,endzeit)) from taetigkeiten where kategorie_id=3
Und wo ist da das group by?