Announcement

Collapse
No announcement yet.

Mittelwert aus DB abfragen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mittelwert aus DB abfragen

    Hallo,

    hab mal ein Problem, bei dem ich leider nicht weiter komme und hoffe, dass ihr mir vlt. dabei helfen könntet.

    Ich habe eine DB mit entsprechenden Messwerten. Dabei wird pro Tag sekündlich ein Messwert gebildet und in die DB reingeschrieben, so dass am Ende des Tages knapp 86000 Messdaten vorhanden sind. Diese möchte ich gerne mit Excel auswerten.
    Um von vorn herein die Datenmenge zu beschränken, will ich nun die Mittelwerte über eine Minute abfragen, sodass ich nur noch ein sechstel der Datenmenge pro Tag habe.

    Habe folgendes ausprobiert:

    Code:
    rs.Open 
    "SELECT Convert(datetime,convert(char(10),DatumZeit,104)) AS Zeit, AVG(Windrichtung) AS Mittel, DatePart(n,[DatumZeit]) AS Minuten, DatePart(hh, [DatumZeit]) AS Std 
    
    FROM [NDL485 basic].[1sec_Werte] 
    
    WHERE DatumZeit BETWEEN CONVERT(datetime, '26.05.2009 00:00:00') AND CONVERT(datetime, '27.05.2009 23:59:59') 
    
    GROUP BY DatumZeit, DatePart(n,[DatumZeit]) 
    
    ORDER BY DatumZeit"
    Als Ergebnis bekomm ich aber nur den sekündlichen Wert der Windrichtung und nicht den über eine Minute gemittelten.

    Ich hoffe, ich konnte mich ein bischen klar ausrücken und dass ihr mir weiter helfen könnt!!

    Grüße
    camas

  • #2
    Das entsteht wohl wegen der Angabe der Spalte DatumZeit im GROUP BY. Wenn du einen SQL-Server verwendest, dürfte diese Abfrage eigentlich gar nicht gehen, denn dann müsste man den Ausdruck DatePart(hh, [DatumZeit]) ebenfalls noch im GROUP BY haben.

    bye,
    Helmut

    Comment


    • #3
      hab nunmal folgendes ausprobiert:
      hab die Spalte "DatumZeit" sowohl bei SELECT als auch bei GROUP BY weggelassen. So fragt er genau das ab, was ich sehen will

      NUR gibt es dann das PROBLEM, dass ich das entsprechende Datum nicht mehr abfragen kann. Sobald die Spalte DatumZeit mit in der Abfrage enthalten ist, bekomm ich nur noch die einzelnen SekundenWerte und keine MinutenMittelwerte mehr
      Was mach ich da falsch?????

      Comment


      • #4
        GROUP BY DatumZeit, ...
        Wenn Du nach DatumZeit gruppierst, bekommst Du es auch auf dessen Granularität, das sind eben Sekunden oder sogar Millisekunden.
        So [highlight=SQL]SELECT CONVERT(varchar(16), GetDate(), 120)[/highlight] bekommst Du es auf Minutenebene; nutze das zum Gruppieren.
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          danke für diesen Tip!!!!

          hab es nun so eingebaut

          Code:
          ... GROUP BY Convert(datetime,convert(char(10),DatumZeit,104)), DatePart(hh, [DatumZeit]), DatePart(n,[DatumZeit]) ORDER BY....
          und es funktioniert

          Aber eine Frage hätte ich noch:

          Wenn ich den nun den Mittelwert über 10 Sekunden oder 5 Minuten bilden will, wie würde ich das dann machen.

          Bei 10 Sekunden müsste ich doch dann einfach die Minute durch 6 Teilen; oder funktioniert das nicht so einfach??

          Code:
          DatePart(n,[DatumZeit]) / 6

          Comment


          • #6
            Hallo camas,

            für die Gruppierung ist effektiv die feinste Granularität ausschlaggebend. Mit
            CONVERT(varchar(16), GetDate(), 120)
            geht es bereits auf Minutenebene, wenn Du das verwendest kannst Du Dir die weiteren
            DatePart(hh, [DatumZeit]), DatePart(n,[DatumZeit])
            sparen.
            Mit varchar(16) werden die Sekunden abgeschnitten, wenn Du es auf varchar(18) änderst, hättest Du auch den 10-Sekunden Anteil mit enthalten.
            Das ganze wird dabei als String interpretiert.
            Für einen flexiblere Anwendung wird es besser sein, wenn Du wirklich auch die DatePart geht (dann aber richtig) und Du es das entsprechend umsetzt.

            Z.B. wenn es auch 5 Sekunden Ebene gehen soll, sieht es so aus:

            [highlight=sql]SELECT
            DATEPART(yy, GetDate()),
            DATEPART(mm, GetDate()),
            DATEPART(dd, GetDate()),
            DATEPART(hh, GetDate()),
            DATEPART(mm, GetDate()),
            DATEPART(ss, GetDate()) / 5[/highlight]

            Mit den 5 Minuten Part ist Dein Ansatz richtig, aus dem oben lässt Du nur den Sekundenanteil weg.
            Olaf Helper

            <Blog> <Xing>
            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

            Comment

            Working...
            X