Ankündigung

Einklappen
Keine Ankündigung bisher.

Zählerstände speichern, Verbrauch berechnen

Einklappen

Neue Werbung 2019

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

  • Zählerstände speichern, Verbrauch berechnen

    Hallo,
    ich möchte gerne Zählerstände drei verschiedener Zähler ablesen und diese in einer MySQL Datenbank speichern. Dann soll anhand dieser Zählerstände der Tages-, Monats- und Jahresverbrauch errechnet werden und mit PHP ausgegeben werden. Wie sollte man so eine Tabelle aufbauen, bzw. wie fragt man am besten z.B. den Monatsverbrauch ab?

  • #2
    Was hast du denn schon mal selber probiert? Du weisst doch am besten, wie die Daten aussehen, die du speichern möchtest. Summieren geht mit GROUP BY und SUM.
    [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

    Kommentar


    • #3
      Das geht in SQL mit Window-Funktionen, hier z.B. lag(). Angenommen, Du hast folgende Tabelle:

      Code:
      test=*# select * from verbrauch ;
         datum    | wert
      ------------+------
       2018-02-12 |  100
       2018-02-13 |  102
       2018-02-14 |  107
       2018-02-15 |  110
       2018-02-16 |  114
       2018-02-17 |  119
       2018-02-18 |  122
       2018-02-19 |  124
       2018-02-20 |  130
       2018-02-21 |  140
       2018-02-22 |  146
       2018-02-23 |  150
       2018-02-24 |  155
       2018-02-25 |  156
       2018-02-26 |  161
       2018-02-27 |  169
       2018-02-28 |  171
       2018-03-01 |  175
       2018-03-02 |  183
       2018-03-03 |  186
       2018-03-04 |  188
      (21 Zeilen)
      Und willst nun immer über die letzten N Tage (mit N=7 für die Woche oder N=30 für den Monat) die Differenz zwischen dem aktuellen Tag und eben N Tage vorher wissen. Mal mit N=3:

      Code:
      test=*# select *, wert - lag(wert,3) over (order by datum) as "3_tage_verbrauch" from verbrauch ;
         datum    | wert | 3_tage_verbrauch
      ------------+------+------------------
       2018-02-12 |  100 |                 
       2018-02-13 |  102 |                 
       2018-02-14 |  107 |                 
       2018-02-15 |  110 |               10
       2018-02-16 |  114 |               12
       2018-02-17 |  119 |               12
       2018-02-18 |  122 |               12
       2018-02-19 |  124 |               10
       2018-02-20 |  130 |               11
       2018-02-21 |  140 |               18
       2018-02-22 |  146 |               22
       2018-02-23 |  150 |               20
       2018-02-24 |  155 |               15
       2018-02-25 |  156 |               10
       2018-02-26 |  161 |               11
       2018-02-27 |  169 |               14
       2018-02-28 |  171 |               15
       2018-03-01 |  175 |               14
       2018-03-02 |  183 |               14
       2018-03-03 |  186 |               15
       2018-03-04 |  188 |               13
      (21 Zeilen)
      
      test=*#
      Das ist Standard-SQL, geht also mit z.B. Oracle, M$SQL, Informix, DB2 und natürlich PostgreSQL (von mir verwended).

      MySQL kann es nicht.

      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

      Kommentar


      • #4
        Eine evtl. bessere Version, die das Fenster besser / korrekter berechnet (auch im Falle mehrerer Messwerte pro Tag oder auch Tage ohne Messung) wäre:

        Code:
        test=*# select *, v1.wert-v2.wert as "3Tagesverbrauch" from verbrauch v1 left join lateral (select * from verbrauch v2 where v2.datum between v1.datum-3 and v1.datum order by datum limit 1) v2 on true;
           datum    | wert |   datum    | wert | 3Tagesverbrauch
        ------------+------+------------+------+-----------------
         2018-02-12 |  100 | 2018-02-12 |  100 |               0
         2018-02-13 |  102 | 2018-02-12 |  100 |               2
         2018-02-14 |  107 | 2018-02-12 |  100 |               7
         2018-02-15 |  110 | 2018-02-12 |  100 |              10
         2018-02-16 |  114 | 2018-02-13 |  102 |              12
         2018-02-17 |  119 | 2018-02-14 |  107 |              12
         2018-02-18 |  122 | 2018-02-15 |  110 |              12
         2018-02-19 |  124 | 2018-02-16 |  114 |              10
         2018-02-20 |  130 | 2018-02-17 |  119 |              11
         2018-02-21 |  140 | 2018-02-18 |  122 |              18
         2018-02-22 |  146 | 2018-02-19 |  124 |              22
         2018-02-23 |  150 | 2018-02-20 |  130 |              20
         2018-02-24 |  155 | 2018-02-21 |  140 |              15
         2018-02-25 |  156 | 2018-02-22 |  146 |              10
         2018-02-26 |  161 | 2018-02-23 |  150 |              11
         2018-02-27 |  169 | 2018-02-24 |  155 |              14
         2018-02-28 |  171 | 2018-02-25 |  156 |              15
         2018-03-01 |  175 | 2018-02-26 |  161 |              14
         2018-03-02 |  183 | 2018-02-27 |  169 |              14
         2018-03-03 |  186 | 2018-02-28 |  171 |              15
         2018-03-04 |  188 | 2018-03-01 |  175 |              13
        (21 Zeilen)
        
        test=*#
        Hier mal ein LATERAL JOIN im Einsatz
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          Zitat von akretschmer Beitrag anzeigen
          MySQL kann es nicht.
          Und somit ist deine Antwort wieder mal sinnbefreit. Das Schlimme an dir ist, dass du das immer wieder so treibst. Dabei bin ich davon überzeugt, dass du ein echter Fachmann in Sachen DBMS bist und du auch Lösungen für MySQL kennst, diese aber einfach nicht posten willst, da du nach Möglichkeit jedem PostgreSQL auf's Auge drücken willst.

          Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

          Kommentar


          • #6
            Vielleicht ist der Fragesteller noch in der Findungsphase seines DB-Systems. Vielleicht dient es als Hint für andere, vor der Entscheidung für ein DB-System dieses auf seine Eignung für die geplanten Abfragen zu prüfen. Ein öffentliches Forum wie dieses dient nicht nur der unmittelbaren und direkten Hilfe für den gerade Fragenden, es ist auch eine Quelle für andere.
            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

            Kommentar


            • #7
              Zitat von akretschmer Beitrag anzeigen
              Vielleicht ist der Fragesteller noch in der Findungsphase seines DB-Systems. Vielleicht dient es als Hint für andere, vor der Entscheidung für ein DB-System dieses auf seine Eignung für die geplanten Abfragen zu prüfen.
              So ein Quatsch. Die Meisten sind durch ihren Hoster an MySQL gebunden. Eine beliebte lokale Entwicklungsumgebung XAMPP liefert MariaDb mit. Damit hat sich das Thema DB-System in der Regel erledigt.
              Zitat von akretschmer Beitrag anzeigen
              Ein öffentliches Forum wie dieses dient nicht nur der unmittelbaren und direkten Hilfe für den gerade Fragenden, es ist auch eine Quelle für andere.
              Und durch dich auch eine Werbeplattform für PostgreSQL

              Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

              Kommentar


              • #8
                Ich sehe das Problem nicht. Für Postgres wurde jetzt eine Lösung gepostet, für MySQL noch gar keine. Wenn sein Tool oder sein Hoster das so nicht können, muss er halt sein Tool oder seinen Hoster wechseln. Aber die Entscheidung zwischen Postgres und MySQL muss er nun mal selber treffen. Das kann er nur, wenn er auch andere Lösungen zu Gesicht bekommt. Hier werden doch auch sonst meistens alternative Lösung gezeigt, entgegen dem was der TE sich ursprünglich vorgestellt hat. Ich benutze halt beides und fühle mich durch solche Posts immer wieder dazu verleitet mir Windowfunktionen endlich mal richtig anzueignen.
                [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

                Kommentar


                • #9
                  Danke chorn
                  PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                  Kommentar


                  • #10
                    Zitat von chorn Beitrag anzeigen
                    Wenn sein Tool oder sein Hoster das so nicht können, muss er halt sein Tool oder seinen Hoster wechseln.
                    Wenn das mal immer so einfach wäre
                    Zitat von chorn Beitrag anzeigen
                    Ich ... fühle mich durch solche Posts immer wieder dazu verleitet mir Windowfunktionen endlich mal richtig anzueignen.
                    Du, aber dem TE nutzt das herzlich wenig.

                    Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                    Kommentar


                    • #11
                      Zitat von uha Beitrag anzeigen

                      Du, aber dem TE nutzt das herzlich wenig.
                      Hast Du Dich schon mal gefragt, was der Fragesteller aus DEINEN Beiträgen hier entnehmen kann?
                      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                      Kommentar


                      • #12
                        Zitat von akretschmer Beitrag anzeigen
                        Hast Du Dich schon mal gefragt, was der Fragesteller aus DEINEN Beiträgen hier entnehmen kann?
                        Nichts, außer dass er deine Beiträge ignorieren kann.

                        Aber du könntest doch mal erklären, warum du eine PostgreSQL-Lösung schreibst, obwohl
                        • es eindeutig um MySQL geht
                        • du auch oft genug eine MySQL-Lösung kennst, diese aber mit Absicht verschweigst.

                        Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                        Kommentar


                        • #13
                          Zitat von uha Beitrag anzeigen

                          Aber du könntest doch mal erklären, warum du eine PostgreSQL-Lösung schreibst, obwohl
                          • es eindeutig um MySQL geht
                          • du auch oft genug eine MySQL-Lösung kennst, diese aber mit Absicht verschweigst.
                          Der erste Teil ist bereits beantwortet und der zweite Teil ist lediglich eine wirre Vermutung Deinerseits.

                          Score adjusted.
                          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                          Kommentar


                          • #14
                            Zitat von uha Beitrag anzeigen
                            Wenn das mal immer so einfach wäre
                            Es geht mir gar nicht um "immer", aber so lange andere DBMS nicht explizit ausgeschlossen werden (Arbeitgeber? Vertragsverhältnis? Kein Bock? Ist ja alles legitim), finde ich es in Ordnung hier Alternativen aufzuzeigen. Am Aufklärungsauftrag ändert das ja erstmal nichts, das ist halt meine Auffassung von "Forum". Mir geht's halt nur darum, dass die Leute hier die besten Tools für ihre Aufgabe bekommen, oder wenigstens die Möglichkeit haben, selbst weitere Recherche zu betreiben. Ich nehm's auch niemandem übel, der mal was anderes vorschlägt, was mir ggf. nicht gefällt (MSSQL ) - Vorschläge kann man ja einfach ausschlagen (machen ja auch viele Noobs).

                            Zitat von uha Beitrag anzeigen
                            Du, aber dem TE nutzt das herzlich wenig.
                            Er denkt mal drüber nach. Ggf. hilft ihm das sogar. Mir persönlich ist das genug, ist hier ja Hilfe zur Selbsthilfe.

                            du auch oft genug eine MySQL-Lösung kennst, diese aber mit Absicht verschweigst.
                            Ich halte das hier jetzt nicht für böse Absicht, ich hab selber nur wenig Bock mich in ein anderes System zu zwängen, obwohl eine gutes (besseres?) Ergebnis mit den Tools die ich kenne zu erreichen ist. Und am Ende hat er hier wenigstens eine Antwort gebracht, mit der man was anfangen kann.
                            [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

                            Kommentar


                            • #15
                              LudwigM: Um den Tages-, Monats- und Jahresverbrauch exakt errechnen zu können müssen die täglichen Zählerstände von 00:00 Uhr vorliegen. Kann das realisiert werden?

                              Kommentar

                              Lädt...
                              X