[MySQL] Stunden- auf Tageswerte verdichten?

Hallo!

Ich hab eine Tabelle wo stündlich abgelesene Werte drinnenstehen, Datum/Uhrzeit der Ablesung stehen in einem Timestamp-Feld.

Weiß jemand ob und wie ich es mit SQL bewerkstelligen kann, dass ich für die einzelnen Tage die Werte zurückbekomme?

Also zB aus:
Wert Zeit
10 01.01.2000 02:00:00
12 01.01.2000 04:00:00
15 02.01.2000 02:00:00
14 02.01.2000 04:00:00

folgendes generieren:
Wert Zeit
22 01.01.2000 00:00:00
29 02.01.2000 00:00:00

Danke und Grüße, Robert

Hallo!

Ich hab eine Tabelle wo stündlich abgelesene Werte
drinnenstehen, Datum/Uhrzeit der Ablesung stehen in einem
Timestamp-Feld.

Weiß jemand ob und wie ich es mit SQL bewerkstelligen kann,
dass ich für die einzelnen Tage die Werte zurückbekomme?

Hi Robert,

Wert Zeit
10 01.01.2000 02:00:00
12 01.01.2000 04:00:00
15 02.01.2000 02:00:00
14 02.01.2000 04:00:00

folgendes generieren:
Wert Zeit
22 01.01.2000 00:00:00
29 02.01.2000 00:00:00

Danke und Grüße, Robert

…nämlich gruppieren und summieren:

select sum(wert), date\_format(Zeit, '%d.%m.%Y')
 from Tabelle 
 group by date\_format(Zeit, '%d.%m.%Y');

Evtl. kannst Du im Formatstring auch die Nullen unterbringen (also date_format(Zeit, ‚%d.%m.%Y 00:00:00‘)), mußt Du ausprobieren.

Gruß

J.

select sum(wert), date_format(Zeit, ‚%d.%m.%Y‘)
from Tabelle
group by date_format(Zeit, ‚%d.%m.%Y‘);

Hallo!

Sorry für die späte Antwort, bin erst jetzt dazugekommen das auszuprobieren. Leider läßt er das date_format im GROUP BY nicht zu, meldet syntax error.

Mein Statement schaut so aus:

SELECT SUM( TR\_Bytes ), date\_format( TR\_TimeStamp, '%d.%m.%Y' ) 
 FROM Traffic 
 GROUP BY date\_format( TR\_TimeStamp, '%d.%m.%Y' );

Grüße, Robert

Sorry für die späte Antwort

Sorry für die noch spätere (bin wieder mal krank - bei uns macht das die Runde).

. Leider läßt er das date_format im GROUP BY

nicht zu, meldet syntax error.

Welche Version setzt Du ein? Bei mir funktioniert das:

mysql\> select \* from traffic; 
+----------+---------------------+ 
| tr\_bytes | tr\_timestamp | 
+----------+---------------------+ 
| 2 | 2001-03-04 12:07:46 | 
| 5 | 2001-03-04 12:08:18 | 
| 3 | 2001-03-05 12:34:45 | 
+----------+---------------------+ 
3 rows in set (0.00 sec) 

mysql\> SELECT SUM( TR\_Bytes ), date\_format( TR\_TimeStamp, '%d.%m.%Y' ) 
 -\> FROM Traffic 
 -\> GROUP BY date\_format( TR\_TimeStamp, '%d.%m.%Y' ); 
+-----------------+-----------------------------------------+ 
| SUM( TR\_Bytes ) | date\_format( TR\_TimeStamp, '%d.%m.%Y' ) | 
+-----------------+-----------------------------------------+ 
| 7 | 04.03.2001 | 
| 3 | 05.03.2001 | 
+-----------------+-----------------------------------------+ 
2 rows in set (0.06 sec) 

Sind die Datentypen so, wie ich sie angenommen habe (Integer und Datetime)?

Ansonsten habe ich keine Idee. Probier vielleicht, einen Alias zu vergeben und über diesen zu gruppieren:

SELECT SUM( TR\_Bytes ), date\_format( TR\_TimeStamp, '%d.%m.%Y 00:00:00' ) as Tag 
 FROM Traffic 
 GROUP BY Tag; 

Das tut bei mir auch. Das mit den Nullen klappt übrigens auch (habe ich eben ins Beispiel reingedrückt).

Gruß

J.

Hallo José!

Probier vielleicht, einen Alias
zu vergeben und über diesen zu gruppieren:

Mit Alias hats hingehauen. :smile:))

Wenn ich so darüber nachdenke, eigentlich macht das Verhalten das nur mit Alias zuzulassen eh Sinn.

Weil du kannst ja eigentlich nur nach Spalten aus dem SELECT gruppieren, Problem wäre sonst, wenn die Funktion beim Gruppieren sich von der Funktion im SELECT unterscheidet, dann würdest du Daten verlieren bzw. wüßte er nicht _welches_ Funktionsergebnis aus dem SELECT er dann in den neu aggregierten Datensatz schreiben sollte.

Wäre also interessant was er bei dir ausgibt wenn du z. B. beim gruppieren date_format( TR_TimeStamp, ‚%m.%Y‘ ), beim SELECT aber date_format( TR_TimeStamp, ‚%d.%m.%Y‘ ) angibst.

Danke und Grüße, Robert

Hi,
: Mit Alias hats hingehauen. :smile:))
Super!

: Wenn ich so darüber nachdenke, eigentlich macht das Verhalten
: das nur mit Alias zuzulassen eh Sinn.
Warum? Ich meine, das erspart Dir Tipparbeit, aber wer arbeiten will, soll ruhig dürfen :smile:

: Weil du kannst ja eigentlich nur nach Spalten aus dem SELECT
: gruppieren, Problem wäre sonst, wenn die Funktion beim
: Gruppieren sich von der Funktion im SELECT unterscheidet, dann
: würdest du Daten verlieren bzw. wüßte er nicht _welches_
: Funktionsergebnis aus dem SELECT er dann in den neu
: aggregierten Datensatz schreiben sollte.
Ja sicher - beide Angaben müssen identisch sein. Deswegen sprach ich von der Tipparbeit.

: Wäre also interessant was er bei dir ausgibt wenn du z. B.
: beim gruppieren date_format( TR_TimeStamp, ‚%m.%Y‘ ), beim
: SELECT aber date_format( TR_TimeStamp, ‚%d.%m.%Y‘ ) angibst.
Eine Fehlermeldung (aber ausprobiert hab ich es jetzt nicht).

Aber interessiert hätte mich trotzdem, welche Version Du verwendest.

Gruß

J.

Hallo José!

Aber interessiert hätte mich trotzdem, welche Version Du
verwendest.

> mysql --version
mysql Ver 9.38 Distrib 3.22.32, for pc-linux-gnu (i686)

So ungefähr halt. :smile:

Grüße, Robert

Hallo José!

Aber interessiert hätte mich trotzdem, welche Version Du
verwendest.

> mysql --version
mysql Ver 9.38 Distrib 3.22.32, for pc-linux-gnu (i686)

So ungefähr halt. :smile:

Hmmm, das erklärt einiges :smile:
weil bei mir läuft
E:\MYSQL\BIN\MYSQL.EXE Ver 11.9 Distrib 3.23.29a-gamma, for Win95/Win98 (i32)
(auf meinem bescheidenen Windows ME).

Also wenn Du unbedingt auf Tipparbeit stehst, mußt Du halt upgraden.

Gruß

J:

Never touch a running system … [oT]
oT