Announcement

Collapse
No announcement yet.

Werte unterschiedlich gewichten bei GROUP BY

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

  • Werte unterschiedlich gewichten bei GROUP BY

    Hallo Zusammen,

    ich habe ein Problem, das ich mit der Programmierung lösen kann. Ich glaube aber, dass es auch mit Oracle-Mitteln gehen soll. Nur kann ich das in Oracle nicht lösen. Vielleicht bringen mich erfahrene Oracle-Benutzer weiter ...

    Also zum Problem:
    ich habe folgende Tabelle
    Code:
    _____________________________________________
    messgeraet     | datetime             | wert
    _____________________________________________
    00001          | 01.01.2009 00:00:00  |   3.2
    00001          | 01.01.2009 01:00:00  |   1.2
    00001          | 01.01.2009 02:00:00  |   -0.2
    00001          | 01.01.2009 03:00:00  |   -0.5
    .....
    00001          | 01.01.2009 23:00:00  |   2.2
    00002          | 01.01.2009 00:00:00  |   5.2
    00002          | 01.01.2009 01:00:00  |   -1.2
    00002          | 01.01.2009 02:00:00  |   0.6
    ....
    usw.
    In der Tabelle sind für ca. 2000 Messgeräte die Messwerte für jede Stunde gespeichert.

    Das Ziel:
    Die Messwerte für die ausgewählte Messgeräte (die Zusammenstellung ändert sich ständig) mit bestimmten Faktoren multiplizieren und für jede Stunde aufsummieren.

    Vorgehensweise:
    1) Werte nach "Datetime" gruppieren, so dass man folgende Tabelle bekommt.
    (Beispiel für zwei Messgeräte)
    Code:
    __________________________________________________
    Datetime              | '00001'          | '00002' 
    __________________________________________________
    01.01.2009 00:00:00   |    3.2           |  2.2
    01.01.2009 01:00:00   |    1.2           |  -1.2
    01.01.2009 02:00:00   |    -0.2          |  0.6
    ....
    01.01.2009 23:00:00   |    2.2           |  ...
    2) Alle Werte einzelner Spalten mit Faktoren gewichten ??????

    zB '00001' mit 0.5 und '00002' mit 1.11115

    3) mit SUM() aufsummieren


    Hier ein Beispiel der SQL-Abfrage (ohne Gewichtung):

    Code:
    SELECT datetime, SUM(wert)
    FROM messgeraete 
    WHERE messgeraet IN('00001', '00002')
    GROUP BY datetime
    ORDER BY datetime ASC

    Wie kann man den Punkt Nr. 2 implementieren?

  • #2
    Hallo,

    ich würde eine weitere Stammtabelle anlegen. Diese hat 2 spalten eine mit der Messgeräte ID und die zweite mit dem Wichtungsfaktor.

    Das Select sieht dann so aus:

    Code:
    
    SELECT datetime, SUM(wert*b.gewicht)
    FROM messgeraete a, messgewicht b 
    WHERE a.messgeraet IN('00001', '00002')
    and a.messgeraet=b.messgeraet
    GROUP BY datetime
    ORDER BY datetime ASC
    Grüße

    Logan2012

    http://www.dbplace.de

    Comment


    • #3
      Wie kann man in einer Abfrage eine Tabelle dynamisch erstellen? (Diese Tabelle ändert sich ständig.)

      Kann man es mit WITH und JOIN implementieren?

      Comment


      • #4
        Hallo,

        Falls du deine Zuordnung in einer Textdatei hast, dann sind vielleicht externe Tabellen das Mittel der Wahl. Such mal nach external table oracle.

        MfG

        Ralf

        Comment


        • #5
          z.B. so:
          [highlight=sql]
          with meineMessgeraete as
          (
          SELECT '00001' messgeraet FROM dual
          UNION ALL
          SELECT '00002' messgeraet FROM dual
          )
          SELECT datetime, SUM(wert*b.gewicht)
          FROM messgeraete a
          JOIN messgewicht b ON a.messgeraet=b.messgeraet
          WHERE a.messgeraet IN
          (SELECT m.messgeraet FROM meineMessgeraete m)
          GROUP BY datetime
          ORDER BY datetime ASC
          [/highlight]

          evtl. könnte auch das funktionieren:

          [highlight=sql]
          with meineMessgeraete as
          (
          SELECT '00001' messgeraet FROM dual
          UNION ALL
          SELECT '00002' messgeraet FROM dual
          )
          SELECT datetime, SUM(wert*b.gewicht)
          FROM messgeraete a
          JOIN messgewicht b ON a.messgeraet=b.messgeraet
          JOIN meineMessgeraete m ON a.messgeraet = m.messgeraet
          GROUP BY datetime
          ORDER BY datetime ASC
          [/highlight]

          Comment


          • #6
            Originally posted by diman View Post
            Wie kann man in einer Abfrage eine Tabelle dynamisch erstellen? (Diese Tabelle ändert sich ständig.)

            Kann man es mit WITH und JOIN implementieren?
            Was meinst Du mit die Tabelle ändert sich ständig?

            Entweder die Werte Gewichte ändern sich , dann werden sie ja irgendwie in der Datenbank gespeichert. Nachdem sich die Werte geändert haben wird das select neu ausgeführt und die Neuen Gewichte werden herangezogen.
            Grüße

            Logan2012

            http://www.dbplace.de

            Comment

            Working...
            X