Ankündigung

Einklappen
Keine Ankündigung bisher.

Durchschnittlicher Umsatz in MYSQL als Zeitreihe über X Tage

Einklappen

Neue Werbung 2019

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

  • Durchschnittlicher Umsatz in MYSQL als Zeitreihe über X Tage

    Hallo,

    ich kann mir mittels einer einfachen

    Select date, umsatz from table order by date asc

    den täglichen Umsatz anzeigen lassen.

    Was ich einfach nicht hin bekomme und auch nicht wirklich bislang hilfreiches gefunden habe, ist wie ich eine Abfrage über den avg der letzten x tage zum jeweiligen Tag machen kann.

    Also konkret will ich wissen

    wie gross war Umsatz am tag x die tage y zuvor.

    Das ganze sollte eine separate Query sein.

    Wäre schön, wenn mir jemand eine Herleitung erklären könnte und warum man das wie angeht.

    Vielen Dank vorab.

  • #2
    Code:
    SELECT DATE(`order_date`) AS `date`, AVG(`sale`) AS `average_sales`
    FROM `order`
    GROUP BY `date`
    Bitte im Handbuch nachlesen was GROUP BY und AVG() macht.

    Als SQLFiddle

    Kommentar


    • #3
      Er hat ja nur 1 Umsatz pro Tag wenn ich das hier
      Zitat von some1new Beitrag anzeigen
      Hallo,

      ich kann mir mittels einer einfachen

      Select date, umsatz from table order by date asc

      den täglichen Umsatz anzeigen lassen.
      richtig lese.

      Zitat von some1new Beitrag anzeigen

      Also konkret will ich wissen

      wie gross war Umsatz am tag x die tage y zuvor.
      .
      Dafür must du nicht nach den Tagen gruppieren, sondern mit WHERE dein Datum eingrenzen, das du per Nutzereingabe als DateFrom und Dateto oder DateTo und Anzahl der Tage zur Verfügung stellst.



      Kommentar


      • #4
        Zitat von some1new Beitrag anzeigen

        Was ich einfach nicht hin bekomme und auch nicht wirklich bislang hilfreiches gefunden habe, ist wie ich eine Abfrage über den avg der letzten x tage zum jeweiligen Tag machen kann.


        Kann es sein, daß Du sowas wie einen gleitenden Durchschnitt zu erhalten? Im Beispiel je Zeile der Durchschnitt zwischen 1 Tag vorher und 1 Tag nachher)

        Code:
        andreas@[local]:5432/test# create table some1new(d date, val int);
        CREATE TABLE
        andreas@[local]:5432/test# insert into some1new select '2018-08-01'::date + random() * 5 * '1day'::interval, random() * 100 from generate_series(1,10) s;
        INSERT 0 10
        andreas@[local]:5432/test# select *, avg(val) over (order by d rows between 1 preceding and 1 following) from some1new order by d;
             d      | val |         avg         
        ------------+-----+---------------------
         2018-08-01 |  66 | 50.5000000000000000
         2018-08-01 |  35 | 43.6666666666666667
         2018-08-02 |  30 | 39.0000000000000000
         2018-08-02 |  52 | 41.6666666666666667
         2018-08-02 |  43 | 58.6666666666666667
         2018-08-03 |  81 | 59.0000000000000000
         2018-08-03 |  53 | 46.6666666666666667
         2018-08-04 |   6 | 34.6666666666666667
         2018-08-04 |  45 | 22.3333333333333333
         2018-08-05 |  16 | 30.5000000000000000
        (10 rows)
        
        --
        -- alternativ
        --
        
        andreas@[local]:5432/test# select distinct on (d) d,  avg(val) over (partition by d rows between 1 preceding and 1 following) from some1new order by d;
             d      |         avg         
        ------------+---------------------
         2018-08-01 | 50.5000000000000000
         2018-08-02 | 41.0000000000000000
         2018-08-03 | 67.0000000000000000
         2018-08-04 | 25.5000000000000000
         2018-08-05 | 16.0000000000000000
        (5 rows)
        
        andreas@[local]:5432/test#
        
        
        andreas@[local]:5432/test#
        Du brauchst dazu aber eine verdammt aktuelle Version von MySQL...
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar

        Lädt...
        X