Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Bestimmte Anzahl von Zeilen wiederholt addieren

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von balou1888, 30 März 2015.

  1. balou1888

    balou1888 Benutzer

    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?
     
  2. akretschmer

    akretschmer Datenbank-Guru


    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
     
  3. balou1888

    balou1888 Benutzer

    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
     
  4. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  5. balou1888

    balou1888 Benutzer

    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.
     
    akretschmer gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden