MYSQL Datenbank durchschnittliche Zeit

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

  • MYSQL Datenbank durchschnittliche Zeit

    Moin,

    ich habe eine Datenbank mit vielen Einträgen und jeder Eintrag hat ein Datum/Zeit, wann er zuletzt aktualisiert wurde.
    Von all diesen Einträgen möchte ich nun ein durchschnittliches Datum/Zeit. Das Format wie es in der DB steht ist zb.

    2007-06-26 19:02:15

    und daraus sollte halt im gleichen Format ein durchschnittswert gemacht werden. Habs mit avg probiert, aber das gibt nur durcheinander
    Bin nicht gerade ein SQL Profi, daher hoffe ich, das mir hier jemand weiter helfen kann.
    mfg
    Rumpel

  • #2
    Re: MYSQL Datenbank durchschnittliche Zeit

    Wie soll denn bitte ein "Durchschnitt" von Datumswerten aussehen ...?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      zb.

      1 Wert : 1 Januar 2007
      2 Wert : 3 Januar 2007

      Der Mittelwert wäre also 2 Januar 2007
      Das ganze ist eine Ogame Datenbank (falls Dir dieses Spiel ein Begriff ist) und es geht darum um eine durchschnittliche Aktualität zu bestimmen. Bei 4491 Einträgen wäre es sonst sehr ungenau wenn man immer das aktuellsten Datum nehmen würde. Daher suche ich die Möglichkeit aus allen Datums/Zeit einen Mittelwert zu errechnen um den User eine durchschnittliche Aktualität auszugeben.
      mfg
      Rumpel

      Kommentar


      • #4
        welch seltsames verlangen...

        vielleicht auf den unix timestamp ausweichen (natürlich nur zur berechnung).

        Kommentar


        • #5
          ehm, DATEDIFF() ?

          Verfahren:

          Code:
          Unterschied =  DATEDIFF(Datum1, Datum2);
          Durchschnitt = Datum1 + Unterschied;
          Wenn Datum1 kleiner, sonst entsprechend abgeändert.
          Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

          Kommentar


          • #6
            wie würde das dann ungefähr aussehen ?

            also ich code nicht die Ogamedatenbank direkt sondern einen IRC Bot in TCL, um Daten aus der DB direkt ins IRC abzufragen. Der Coder der Ogamedatenbank hat eine neue Version raus gebracht und dort zahlreiche Sachen in der Datenbank geändert. Unter anderem auch halt die Einträge der Datumsangaben, wann zu letzt der Eintrag aktuallisiert wurde. Früher konnte ich mit

            SELECT FROM_UNIXTIME(avg(zeit+3600), '%d/%m/%Y %H:%i:%s') FROM $galatable" -flatlist

            den durchschnitt errechnen, aber mit dem neuen Format funktioniert das heute nicht mehr

            mfg
            Rumpel

            Kommentar


            • #7
              jetzt muss die spalte "zeit" in der query nach unix timestamp konvertiert werden.
              Zuletzt geändert von penizillin; 27.06.2007, 19:57.

              Kommentar


              • #8
                hmmm
                ich habs nun so versucht

                SELECT FROM_UNIXTIME(avg '%Y-%m-%d %H:%i:%s', (zeit+3600))

                aber der Syntax scheint falsch zu sein ...
                hab schon rumprobiert aber geht nicht

                Kommentar


                • #9
                  http://dev.mysql.com/doc/refman/5.0/...unix-timestamp

                  Kommentar


                  • #10
                    das klappt auch nicht ...
                    ich habs jetzt ganz simpel

                    SELECT avg(zeit)

                    das Datum kommt damit hin. Allerdings gibt er dann den unix timestap ins irc . Ich habs dann versucht mit DATE_FORMAT(zeit, '%d.%m.%Y')
                    um zu wandeln. Nur dann meckert er rum, er möchte doch gerne ein GROUP BY. Lasse ich aber Gruppieren wird das ergebniss wieder verfälscht. Ergebniss wäre dann das letzte bekannte Datum von allem.
                    Sitze da jetzt seit 20:00 Uhr dran und langsam würde ich gerne ins Keyboard beissen =)
                    mfg
                    Rumpel

                    Kommentar


                    • #11
                      Alternativvorschlag:

                      Du ermittelst erst wieviele Einträge du hast - den Wert den du dabei erhältst teilst du einfach durch zwei.

                      Mit diesem Wert setzt du eine Query mit LIMIT ab, die nach deiner Datumsspalte sortiert ist.

                      Das nennt man dann zwar nicht Durchschnitt, sondern Median - der Vorteil vom Median ist, dass er resistenter gegen Ausreisser ist - Beispiel:

                      Du hast eine einfache Liste von Werten:

                      1
                      1200
                      1250
                      1260
                      1270

                      Der Durchschnitt wäre 996,2 - weil die eins den Durschnitt ziemlich drückt.

                      Beim Median pickt man sich quasi in der sortierten Liste den Wert raus, der in der Mitte der sortierten Liste liegt -> 1250
                      Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                      Schön - etwas Geschichte kann ja nicht schaden.
                      Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                      Kommentar


                      • #12
                        Zu deinem ursprünglichen Anliegen - obwohl hier eigentlich kein fertiger Code gepostet wird:

                        PHP-Code:
                        SELECT FROM_UNIXTIMEAVGUNIX_TIMESTAMPZeit ) + 3600 ) , '%d.%m.%Y %H:%i:%S' ) as myAVG FROM bla 
                        ... bevor du dich an deiner Tastatur vergreifst.
                        Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                        Schön - etwas Geschichte kann ja nicht schaden.
                        Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                        Kommentar


                        • #13
                          Original geschrieben von Quetschi
                          Zu deinem ursprünglichen Anliegen - obwohl hier eigentlich kein fertiger Code gepostet wird:

                          PHP-Code:
                          SELECT FROM_UNIXTIMEAVGUNIX_TIMESTAMPZeit ) + 3600 ) , '%d.%m.%Y %H:%i:%S' ) as myAVG FROM bla 
                          ... bevor du dich an deiner Tastatur vergreifst.
                          Quetschi mein Held
                          Es funktioniert, es ist ein Wunder
                          und ich glaubte echt schon, ich hätte jede möglichkeit durch
                          vielen vielen Dank.

                          Das mit Median werde ich mir aufjedenfall auch noch mal ansehen, aber im moment geht es erstmal darum einen funktionsfähigen Code auf die Beine zu stellen. Danach kommt nach und nach die Deluxe Version des Bots

                          mfg
                          Rumpel

                          Kommentar

                          Lädt...
                          X