MYSQL: Stunden zusammen fassen - Rundungsfehler

Cusco

Erfahrenes Mitglied
Hi,

ich möchte die Stunden eines Time-Feldes in 1/2 Tag (12 Stunden zusammen), 1/4 Tag (6 Stunden) und 1/8 Tag zusammen fassen (gruppieren). Nur habe ich einen Fehler drin der immer 1 Zeile mehr ausgibt als die Routiene eigentlich sollte.

Gibt 3 Zeilen statt 2 zurück
Code:
cast((cast(time_format(`zeit`,'%k') as UNSIGNED)/12) as UNSIGNED) as `halbertag`

Gibt 5 Zeilen statt 4 zurück
Code:
cast((cast(time_format(`zeit`,'%k') as UNSIGNED)/6) as UNSIGNED) as `vierteltag`

Gibt 9 Zeilen statt 8 zurück
Code:
cast((cast(time_format(`zeit`,'%k') as UNSIGNED)/3) as UNSIGNED) as `achteltag`

Worin liegt der (Rundungs-) Fehler, ich komm da einfach nicht hinter.
 
Hi,

welcher DATENTYP in der Tabelle? ->
sagt mir nix.
Diese DATENTYPEN gibt es:
PHP:
Data Type 	“Zero” Value
DATETIME 	'0000-00-00 00:00:00'
DATE 	        '0000-00-00'
TIMESTAMP 	'0000-00-00 00:00:00'
TIME 	        '00:00:00'
YEAR 	        0000

Wie sieht die gesamte query aus?

Grüße
 
Hi,

welcher DATENTYP in der Tabelle? -> sagt mir nix.
Diese DATENTYPEN gibt es:
PHP:
Data Type 	“Zero” Value
DATETIME 	'0000-00-00 00:00:00'
DATE 	        '0000-00-00'
TIMESTAMP 	'0000-00-00 00:00:00'
TIME 	        '00:00:00'
YEAR 	        0000

Wie sieht die gesamte query aus?

Grüße

Der Query ist eine Zusammenstükelung, in einer Funktion, die 4 mal aufgerufen wird mit jeweils anderen Parametern die direkt den Query betreffen, aber ich versuche es:
Es ist eine User-Online Statistik Tabelle, mit maximal 1440 Einträgen (1 Eintrag pro Minute, also 60 die Stunde).

Das Feld `zeit` ist von Typ TIME wie im ersten Beitrag geschrieben, wobei die Sekunden immer auf 00 sind.

Code:
$sql = "cast((cast(time_format(`zeit`,'%k') as UNSIGNED)/12) as UNSIGNED)";// Funktionsabhänig
$sort = "`stunde` asc"; // Wird je mach sortierung neu bestimmt

mysql_query("select $sql as `stunde`, sum(`counter`) as `counter`, sum(`online`) as `online`, round(avg(`pi`),2) as `pi`, max(`pi`) as `pimax`, min(`pi`) as `pimin`, count(*) as `minuten` from `$dbtabelle` group by `stunde` order by $sort;")

Es Entstehen 4 Tabellen, die 12 Stunden Tabellen-Ausgabe sieht aktuell so aus:
Code:
Stunde Counter Online UO UMA UMI Minuten
0-12     1.731    6.966   3,07 11,43 1,00 326 
12-24 22.446 364.880 14,19 22,74 1,29 719
24-36 12.792 222.168 17,19 30,04 8,93 360

Wie ersichtlich ist ist die letzte Zeile zu viel, der Tag hat nur 24 und nicht 36 Stunden und in der Tabelle sind aktuell 1405 Einträge (von maximal 1440). Jede der 2 Zeilen müste daher fast 720 Minuten auf weisen, aber es sind 3 Zeilen mit 326, 719 und 360 Minuten.
 
Zuletzt bearbeitet:
Ich habe es jetzt hinbekommen :D

Beispiel 12 Stunden:
Code:
round((cast(time_format(`zeit`,'%k') as DECIMAL)/12)-.49) as `halbertag`
 
Zurück