Bestimmte Anzahl von Zeilen wiederholt addieren

balou1888

Benutzer
Beiträge
7
Hallo an alle,

ich hab folgendes Problem und weis nicht ganz recht wie ich es lösen kann. Und zwar habe ich eine Tabelle mit Messwerten und Datum-Uhrzeit (sekundlich wurden hunderte Messwerte aufgenommen). Jetzt möchte ich immer 7 Messwerte summieren. Also ich hab z.b. 70 Messwerte und nach dem Summieren sollten nur noch 10 Messwerte ausgegeben werden.

Leider kann ich das mit Group by nicht ordentlich lösen, da die Daten (leider) nicht so ordentlich geloggt wurden, wie ich es erwarte hatte.
Aber was ich weiß, ist das immer 7 Werte nacheinander zusammen summiert werden sollten.

Also ich suche jetzt im Prinzip eine Möglichkeit, immer 7 Messwerte zu addieren und diese in eine Neue Tabelle auszugeben.

Habt ihr da irgendwelche Vorschläge?
 
Werbung:
Hallo an alle,

ich hab folgendes Problem und weis nicht ganz recht wie ich es lösen kann. Und zwar habe ich eine Tabelle mit Messwerten und Datum-Uhrzeit (sekundlich wurden hunderte Messwerte aufgenommen). Jetzt möchte ich immer 7 Messwerte summieren. Also ich hab z.b. 70 Messwerte und nach dem Summieren sollten nur noch 10 Messwerte ausgegeben werden.

Leider kann ich das mit Group by nicht ordentlich lösen, da die Daten (leider) nicht so ordentlich geloggt wurden, wie ich es erwarte hatte.
Aber was ich weiß, ist das immer 7 Werte nacheinander zusammen summiert werden sollten.

Also ich suche jetzt im Prinzip eine Möglichkeit, immer 7 Messwerte zu addieren und diese in eine Neue Tabelle auszugeben.

Habt ihr da irgendwelche Vorschläge?


Du hast also ein kriterium, nach denen man die sortieren kann. Wenn Du da dann immer 7 zusammen gruppieren willst zählt man die und teilt durch 7 und nimmt sich den ganzzahligen Teil - so:

Code:
-- zuerst eine testtabelle
test=*# create table demo as select s from generate_series(1,40) s;
SELECT 40   
Time: 132,122 ms   
test=*# select * from demo;   
 s   
----   
  1   
  2   
  3   
  4   
  5   
  6   
  7   
  8   
  9   
 10   
 11   
 12   
 13   
 14   
 15   
 16   
 17   
 18   
 19   
 20   
 21   
 22   
 23   
 24   
 25   
 26   
 27   
 28   
 29   
 30   
 31   
 32   
 33   
 34   
 35   
 36   
 37   
 38   
 39   
 40   
(40 rows) 

-- nun zählen wir

test=*# select *, row_number() over (order by s) as g from demo;
 s  | g
----+----
  1 |  1
  2 |  2
  3 |  3
  4 |  4
  5 |  5
  6 |  6
  7 |  7
  8 |  8
  9 |  9
 10 | 10
 11 | 11
 12 | 12
 13 | 13
 14 | 14
 15 | 15
 16 | 16
 17 | 17
 18 | 18
 19 | 19
 20 | 20
 21 | 21
 22 | 22
 23 | 23
 24 | 24
 25 | 25
 26 | 26
 27 | 27
 28 | 28
 29 | 29
 30 | 30
 31 | 31
 32 | 32
 33 | 33
 34 | 34
 35 | 35
 36 | 36
 37 | 37
 38 | 38
 39 | 39
 40 | 40
(40 rows)

-- und nun die Division:

test=*# select *, (row_number() over () - 1)  / 7 as g from demo;
 s  | g
----+---
  1 | 0
  2 | 0
  3 | 0
  4 | 0
  5 | 0
  6 | 0
  7 | 0
  8 | 1
  9 | 1
 10 | 1
 11 | 1
 12 | 1
 13 | 1
 14 | 1
 15 | 2
 16 | 2
 17 | 2
 18 | 2
 19 | 2
 20 | 2
 21 | 2
 22 | 3
 23 | 3
 24 | 3
 25 | 3
 26 | 3
 27 | 3
 28 | 3
 29 | 4
 30 | 4
 31 | 4
 32 | 4
 33 | 4
 34 | 4
 35 | 4
 36 | 5
 37 | 5
 38 | 5
 39 | 5
 40 | 5
(40 rows)

Nun hast ein schönes Kriterium zum gruppieren, einfach, oder?

Ähm - MySQL kann das allerdings nicht. Vielleicht findest irgendwo eine Alternative zu row_number() in MySQL, hab ich wohl schon gesehen.


Andreas
 
Vielen Danke Andreas für deine Mühe,

aber ich hab das jetzt so gelöst. Ich log mich jetzt mit einem kleinem Programm, das ich mit Hilfe von Processing geschrieben hab, in die Datenbank ein. Dann hole ich mir, soweit MySQL es zulässt, die Daten raus, und verarbeite die dann lokal auf dem Rechner.

Vorteil, ich kann die dann sofort Plotten :)

Manuel
 
Werbung:
Nachteil: Du machst das alles extern. Wenn das in der DB gespeichert werden soll (das war Dein ursprünglicher Wunsch) dann ist das massiv unelegant.

Da hast du natürlich recht. Aber ich glaub, ich hab da was falsch beschrieben. Es muss nicht zwingend in eine neue Tabelle (sorry unglücklich formuliert). Was ich meinte, durch eine Abfrage sollen mir die Werte ausgegeben werden. Es sollte keine echte neue Tabelle erstellt werden.

Aber ich werde mal die Tage deinen Vorschlag trotzdem, so weit es geht, umsetzen, wenn ich mit dem Rest fertig bin.
 
Zurück
Oben