# Hilfe bei DB-Select-Abfrage #

Lutz R.

Neuer Benutzer
Beiträge
3
Hallo Freunde der lustigen SQL-Befehle,

ich suche für folgendes Problem eine SQL-Abfrage:

1. Table mit zwei Spalten (TimeStamp, Werte).
2. Die Werte werden im 1-Minuten-Rythmus in die Tabelle geschrieben (also 60 Werte pro Minute)

Aufgabe:

Die Summe aller Viertelstundenwerte in einem Zeitraum von bis ausgeben. Also meinetwegen vom 3.1.2016 bis 4.1.2016 immer die Summe der Werte von (Minute:) 00-14, 15-29, 30-44, 45-59 und das von jeder Stunde. Bei diesem Beispiel müssten also 192 Summen augegeben werden (2 Tage * 24 h * 4 Viertelstunden = 192).

Ich bin mir nicht wirklich sicher ob dies geht. Würde mich freuen, wenn irgendwer eine (reine SQL-) Lösung hätte.

Danke schonmal.

Lutz
 
Werbung:
wir bauen uns eine solche Tabelle:

Code:
test=*# create table lutz_r as select '2016-08-10 10:00:00'::timestamp + s * '1minute'::interval as ts, (random() * 10)::int as val from generate_series(1, 120) s;
SELECT 120
test=*# select * from lutz_r limit 5;
  ts  | val
---------------------+-----
 2016-08-10 10:01:00 |  8
 2016-08-10 10:02:00 |  7
 2016-08-10 10:03:00 |  3
 2016-08-10 10:04:00 |  5
 2016-08-10 10:05:00 |  1
(5 Zeilen)

und fragen diese ab:

Code:
test=*# select r / 15 as viertel_stunde, min(ts), sum(val) from (select ts, row_number() over (order by ts) as r, val from lutz_r ) foo group by r / 15 order by r / 15;
 viertel_stunde |  min  | sum
----------------+---------------------+-----
  0 | 2016-08-10 10:01:00 |  72
  1 | 2016-08-10 10:15:00 |  73
  2 | 2016-08-10 10:30:00 |  70
  3 | 2016-08-10 10:45:00 |  84
  4 | 2016-08-10 11:00:00 |  71
  5 | 2016-08-10 11:15:00 |  68
  6 | 2016-08-10 11:30:00 |  79
  7 | 2016-08-10 11:45:00 |  82
  8 | 2016-08-10 12:00:00 |  1
(9 Zeilen)

Ist wohl das, was Du suchst. Rein in SQL.
 
Hallo rkretschmer,

vielen Dank für die schnelle Hilfe. Ich bin im Moment noch am 'Nachvollziehen' der SQL-Zeile. Derzeitig scheitern meine Versuche, da es in MySQL leider die Funktion row_number() nicht gibt. Es gibt dafür wohl verschiedene Ansätze, diese Funktion zu emulieren. Das bin ich eben gerade dran zu versuchen. Wenn Du da eine alternative Möglichkeit sehen solltest ....

Ich melde mich nochmal, wenn ich erfolgreich gewesen bin oder eben gescheitert bin und aufgegeben habe.

Danke nochmal.

MfG

Lutz R.
 
ja, korrekt, row_number() kann MySQL nicht - wie so vieles. Ich denke mal, Du könntest mit den Sekunden seit EPOCH hantieren, diese durch die Anzahl der Sekunden je Intervall teilen (also 60 * 15). Der 'Rest' sollte dann gleich sein.
 
Mit dem UNIX_TIMESTAMP bin ich grad am probieren. Sieht auf jeden Fall gut aus. Du klingst nicht sehr überzeugt von MySQL. Das System ist 'eigentlich' für die relativ 'normalen' Aufgaben ausreichend - denke ich. Solche speziellen Sachen wie eben row_number() brauch ich eher selten. Ich nutze MySQL unter Linux eher als profanen Datensammler. Für das Auswerten und/oder Visualisieren reicht für meine Belange im Normalfall Excel aus oder auch als Visu unter Linux 'HighCharts' mit bisschen PHP etc.

MfG

Lutz
 
Werbung:
Zurück
Oben