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

Aus zwei Spalten eine Matrix erstellen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Blaidd_Drwg, 8 März 2016.

  1. Blaidd_Drwg

    Blaidd_Drwg Benutzer

    Hallo liebe SQL Gemeinde,

    ich habe noch etwas an einem alten Projekt nachzuarbeiten und finde keine Lösung für dieses Problem (zumindest keine, die ich verstehen und reproduzieren kann...)

    Mein Problem ist folgendes:

    • ich habe eine Tabelle 527.040 Zeilen und drei Spalten: ID (INT, auto_increment), Datum (datetime) und eine Wertespalte, die aufsummierte Energiewerte enthält (float).
    • Die Tabelle gibt minütliche Messwerte über ein ganzes Jahr wieder (2012 -> Schaltjahr -> 366 Tage -> 1.440 Messwerte/Tag = 527.040 Werte).
    • Zur besseren Übersicht möchte ich nun die einzelnen Tage in den Zeilen und die dazugehörigen Messwerte in den Spalten abtragen. Das heißt bei meiner jetzigen Datenlage: 366 Zeilen und 1.440 Spalten.
    • Da dies aber eine Übersicht darstellen soll, sind 1.440 Spalten der Sache nicht gerade dienlich. Daher hätte ich gerne nur die Werte der vollen Stunden um somit 24 Spalten und 366 Zeilen zu erhalten.
    UND um die Sache noch auf die Spitze zu treiben:
    • Natürlich verfälscht die beschriebene Art der Datenreduzierung die Aussage der Tabelle (da aus 1.440 Werten nur 24 ausgewählt werden und der Rest weg fällt). Daher wäre es als "Feinschliff" super, wenn nicht einfach nur die Werte jeder vollen Stunde genommen werden, sondern im Optimalfall der Durchschnitt der gesamten Stunde errechnet und in die Tabelle eingetragen würde.

    Kann mir einer von euch hierfür nen Code bauen?
    Ich hoffe das ist nicht zu viel verlangt. Allerdings ich habe schon so positive Erfahrungen in diesem Forum gemacht, dass ich nicht daran zweifle, dass auch für dieses Problem eine Lösung gefunden wird.

    Falls noch Angaben fehlen, bitte melden, dann liefere ich schnellst möglich nach!

    Vielen Dank schonmal! ;)

    Matthias
     
  2. akretschmer

    akretschmer Datenbank-Guru

  3. ukulele

    ukulele Datenbank-Guru

    Ein 24h Schnitt zu errechnen ist ja jetzt nicht schwer.

    Für dein Vorhaben hast du meiner Meinung nach die falsche Datenbank gewählt, MySQL kann kein PIVOT (wäre auch viel Arbeit) und auch sonst nichts womit ich das machen würde.

    Warum eine Tabelle mit 1440 Spalten eine Verbesserung der Übersicht sein soll ist mir auch nicht ganz klar. Wer soll sich das angucken? Nimm Excel und mach ein Diagramm aus den Daten, dazu brauchst du nicht erst ein Pivot wenn ich das richtig in Erinnerung habe.
     
  4. Blaidd_Drwg

    Blaidd_Drwg Benutzer

    Danke für die Anregungen. Ich habe jetzt die stündlichen Durchschnittswerte berechnen lassen und Datum und Uhrzeit getrennt in zwei Spalten eintragen lassen. Mittlerweile sind es anstatt 527.040 Zeilen nur noch 8.784 Zeilen. Somit schon wesentlich übersichtlicher.

    Die Sache mit der Darstellung in einer Pivot Tabelle ist folgende:
    Wenn ich die Daten in (momentan) vier Spalten und 8.784 Zeilen als .csv ausgeben lasse und in MS Excel importiere, stehe ich vor der Monsteraufgabe diese Daten brauchbar zu ordnen. Das heißt jeden Tag ausschneiden und transponiert einfügen... Manuell ist das natürlich zu viel Arbeit (mit Makros kenne ich mich kaum aus). Deshalb wollte ich vorher eine Tabelle mit folgender Struktur erstellen:

    Datum _Stunde1_Stunde2_Stunde3_..._Stunde24
    01.01. _WertS1 _ WertS2 _ WertS3 _..._WertS24
    ...
    31.12. _WertS1 _ WertS2 _ WertS3 _..._WertS24

    Stand momentan:

    ID Datum Uhrzeit Daten
    01 _ 01.01. _ Stunde1 _ WertS1
    02 _ 01.01. _ Stunde2 _ WertS2
    ...
    8.784 _ 31.12. _ Stunde24 _ WertS24


    Wenn ich diese dann als .csv exportiere, hab ich in Excel keine Arbeit mehr. Oder kennt einer von euch eine einfache Methode die untere Tabelle in MS Excel zur oberen zu konvertieren?
     
  5. ukulele

    ukulele Datenbank-Guru

    Du kannst doch in Excel auch die Daten als Basis für ein Diagramm nehmen wenn die untereinander stehen mit Zeit und Wert, wiso willst du das unbedingt in 8784 Spalten bringen? Das kannst du natürlich auch mit 8783 Joins machen oder dir von einem dynamischem SQL Script 8783 Joins erzeugen lassen aber das ist doch irgendwie total sinnfrei.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    MySQL hat übrigens Limits. Eines ist IIRC 4096 Columns per Table, mit InnoDB wohl 'nur' 1000. Was völlig ausreichend ist.
     
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