Richtige Gruppierung in Statement?

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

  • Richtige Gruppierung in Statement?

    Hallo zusammen,

    ich habe mir vor wenigen Monaten einen GPS Logger gekauft, der im 1 Sekunden Takt zurückgelegte Wegpunkte nebst Geschwindigkeit speichert.
    Diesen Export zerlege ich mittels PHP und speichere die Werte in einer Datenbank.

    Von Zeit zu Zeit schaue ich (ich lasse mir mit OpenFlashChart) ein Diagramm ausgeben, wann ich wie schnell Rad gefahren bin. Klappt.
    Allerdings möchte ich mir auch mal ein Diagramm ausgeben lassen, dass mir ausgibt, ob ich in Bewegung war oder nicht, also quasi 0 oder 1.

    Mein erster Gedanke war, mir einfach ein Diagramm ausgeben zu lassen (Balkendiagramm), sprich setze Balken mit fester Höhe wenn Geschwindigkeit > 0 und setze Balken mit Höhe 0 wenn Geschwindigkeit = 0.

    Wenn ich nun aber 6 Stunden auf dem Rad sitze, wird das Diagramm unübersichtlich und hin und wieder stürzt der Plugin Container von Firefox ab.

    Könnte man nicht, und das ist in diesem Fall meine konkrete Frage, die abgefragten Werte gruppieren, so dass man sagt: Mache einen Gesamtbalken im Diagramm von Uhrzeit a bis Uhrzeit b unter der Bedingung Geschwindigkeit > 0 ?

    Hat hier jemand einen Denkansatz für mich?

    Ich habe im Hinterkopf: SELECT DISTINCT (geschwindigkeit) GROUP BY geschwindigkeit, ich bin mir aber a.) nicht sicher, ob der Ansatz richtig ist und b.) ob es nicht vielleicht viel praktikablere Lösungen gibt.

    Viele Dank im Voraus für Hinweis
    Boris

  • #2
    Ich versteh dein Problem nicht. Mach doch einfach ein
    Code:
    WHERE geschwindigkeit > 0
    in deine bestehende Abfrage?
    This is what happens when an unstoppable force meets an immovable object.

    Kommentar


    • #3
      Aber dann erhalte ich doch eine Ausgabe aller Werte, d.h. jeder Wert resultiert in einem einzelnen Balken. Ich wünsche mir aber aus Gründen der Übersicht im Diagramm einen Balken, der von Uhrzeit a bis Uhrzeit b reicht, wo ich in Bewegung war, dann z.B. den Balken von Uhrzeit b bis c, wo ich mich im Stillstand befand, dann ggf. wieder einen Balken in Bewegung, etc.

      Mit geht es primär darum, mit einem Balken einen Zeitraum abzudecken und nicht ein Balken pro Wegpunkt.

      Kommentar


      • #4
        Ah okay, jetzt kommen wir der Sache näher.

        Die interessante Frage, die du dir stellen musst, ist: Was soll der Balken darstellen, wenn er über eine ganze Reihe von Punkte geht? Die Höchstgeschwindigkeit? Den Durchschnitt? Die Summe? Das Minimum?

        Je nachdem verwendest du dann MAX(), MIN(), AVG() etc. und die von dir bereits aufgezeigte GROUP BY-Funktion. Zusätzlich kannst du dann noch die Nullrunden über ein HAVING rausfiltern.
        This is what happens when an unstoppable force meets an immovable object.

        Kommentar


        • #5
          Im Grunde soll der Balken nur Zustand 0 oder Zustand 1 darstellen, also Rad war in Bewegung oder Rad war nicht in Bewegung. Für ein "richtiges" Geschwindigkeitsdiagramm habe ich mir schon ein Chartscript geschrieben.

          Zur Zeit hänge ich bei

          SELECT gpsdatetime, speed FROM tabelle WHERE speed > 0 GROUP by speed ORDER by gpsdatetime DESC LIMIT 1000

          fest.

          Kommentar


          • #6
            Wieso gruppierst du nach der Geschwindigkeit? Damit fasst du alle Zeilen zusammen, die die gleiche Geschwindigkeit haben.

            Code:
            date | speed
            t1    | s1
            t1    | s0
            t2    | s0
            t2    | s1 
            t2    | s2
            t2    | s3
            t3    | s1
            t3    | s0
            t3    | s3
            Wenn du hier nach speed gruppierst, erhältst du das Ergebnis "s0, s1, s2, s3" - du willst aber "t1, t2, t3".

            Du willst doch, dass alle Zeilen zusammengefasst werden, die innerhalb der gleichen Zeit geschrieben wurde, also musst du nach der Zeit gruppieren.
            This is what happens when an unstoppable force meets an immovable object.

            Kommentar


            • #7
              Uff, klor, ich dussel.

              Mein aktueller Ansatz sieht nun so aus:

              SELECT
              date_format(FROM_UNIXTIME(gpsdatetime + 7200), '%d.%m.%Y-%H:%i:%s') AS Zeit,
              satellites,
              speed FROM tabelle
              group by round((gpsdatetime) / 300) ORDER by gpsdatetime DESC LIMIT 1000

              Allerdings kann es dann auch sein, dass zwei Zeilen aufeinander folgen mit Speed = 0. Müsste ich dann nicht zusätzlich auch noch nach Speed gruppieren?

              Irgendwie habe ich gerade Probleme, das logisch zu erfassen.

              Kommentar


              • #8
                Naja, wenn du so lange "still" standest, dann wird das natürlich auch so angezeigt. Du könntest alle 0er mit einer HAVING-Klausel ausmerzen oder vorher schon mit einem WHERE.
                This is what happens when an unstoppable force meets an immovable object.

                Kommentar

                Lädt...
                X