Durchschnitt und Gruppierung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Durchschnitt und Gruppierung

    Habe da ein Problem bei dem mir vielleicht wer helfen kann.

    Ich habe eine Tabelle mit Messwerten die als Key einen UNIX timestamp haben (alle 3 Minuten einen Messwert - ca 300000 Messewrte)
    Ich möchte nun eine Grafik erstellen die z. B. 600 Pixel breit ist.
    In der Abfrage frage ich nach Beginnzeit und Endzeit ab. Nun brauche ich einen SELECT der mir jeweils den Mittelwert aus dem interval ausgiebt sodas ich nicht mehr als 600 Ergebnisse für die Grafik bekomme.
    Ich hab es im PHP so gelöst das ich einen Intervall getrennt berechnet habe, bei Langen Zeitraumen braucht dies aber zu lange.. (Abbruch durch PHP Interpreter)
    GROUP BY kann ich nicht einsetzen da der timestamp ja durchlauft ??
    Interval gibts nur für Datum.

    Hat jemand eine Lösung

    Gruß Othmar
    Zuletzt geändert von gattringerot; 21.07.2003, 11:00.

  • #2
    Re: Durchschnitt und Gruppierung

    Original geschrieben von gattringerot
    GROUP BY kann ich nicht einsetzen da der timestamp ja durchlauft ??
    wer sagt denn, dass du den timestamp im SELECT haben musst. zumindest aber nicht mir allen informationen.

    du kannst du timestamp in deiner abfrage mittels DATE_FORMAT so darstellen, dass er nur als jahr-monat-tag dargestellt wird. und darauf kannst du auch schön ein GROUP setzen.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Re: Re: Durchschnitt und Gruppierung

      Original geschrieben von Abraxax
      wer sagt denn, dass du den timestamp im SELECT haben musst. zumindest aber nicht mir allen informationen.

      du kannst du timestamp in deiner abfrage mittels DATE_FORMAT so darstellen, dass er nur als jahr-monat-tag dargestellt wird. und darauf kannst du auch schön ein GROUP setzen.
      Danke,
      Ja das ist schon richtig aber ich kann nicht nach zB. auf alle 320 Datensätze gruppieren.

      der Select :
      SELECT avg(sensor1) FROM daten GROUP BY DATE_FORMAT(FROM_UNIXTIME(timestamp),'%Y-%m-%d');

      selecttiert nur auf "gerade" Tage. Wie schauts aber aus wenn ich auf Viertelstundenwerte grupiere ??

      Gruß Othmar

      Kommentar


      • #4
        du musst das DATE_FORMAT im select einarbeiten und ein alias verwenden.

        das GROUP BY geht auf den alias.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Original geschrieben von Abraxax
          du musst das DATE_FORMAT im select einarbeiten und ein alias verwenden.

          das GROUP BY geht auf den alias.
          Entweder ich stehe zur Zeit föllig auf der Seife oder ???
          Was soll das bringen wenn ich im select ein alias mache.
          Bitte um kurzes Beispiel

          Gruß Othmar

          Kommentar


          • #6
            zuerst würde ich dir noch empfehlen, das feld nicht timestamp zu nennen, denn timestamp ist ein reserviertes wort in mysql.

            und hier ist ein beispiel.

            Code:
            SELECT      avg(sensor1),
                        DATE_FORMAT(FROM_UNIXTIME(`timestamp`),'%Y-%m-%d') datumsalias
                        
            FROM        daten
            
            GROUP BY    datumsalias;
            datumsalias ist nun YYYY-MM-DD formatiert. die ganzen uhrzeiten und sekunden sind nicht mehr da. daher kannst du das nun auch brav gruppieren.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              Original geschrieben von Abraxax
              zuerst würde ich dir noch empfehlen, das feld nicht timestamp zu nennen, denn timestamp ist ein reserviertes wort in mysql.

              und hier ist ein beispiel.

              Code:
              SELECT      avg(sensor1),
                          DATE_FORMAT(FROM_UNIXTIME(`timestamp`),'%Y-%m-%d') datumsalias
                          
              FROM        daten
              
              GROUP BY    datumsalias;
              datumsalias ist nun YYYY-MM-DD formatiert. die ganzen uhrzeiten und sekunden sind nicht mehr da. daher kannst du das nun auch brav gruppieren.
              Das ist mir schon klar - danke
              Aber wenn ich nach z.B 25 Minuten gruppiren muss funktioniert das nicht mehr. Ich brauche eine Art Intervallzähler das ganze muss ja immer -egal welcher Zeitraum gewählt wird 600 Werte ausgeben

              Gruß Othmar

              Kommentar


              • #8
                mit deinen minuten wird es schon schwieríger. aber du kannst ja mehrere abfrage machen, und beim DATE_FORMAT z.b. YYYY-MM-DD mm schreiben. mm == minuten.

                teste einfach ein wenig rum. jetzt sollte aber zumindest dein hauptproblem gelöst sein.
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  Original geschrieben von gattringerot
                  Ich brauche eine Art Intervallzähler das ganze muss ja immer -egal welcher Zeitraum gewählt wird 600 Werte ausgeben
                  warum nimmst du dann nicht einfach alles ab einem bestimmten startzeitpunkt, und schränkst die anzahl der ergebnisse mit LIMIT ein?
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar

                  Lädt...
                  X