Announcement

Collapse
No announcement yet.

Wochen-Dashboard inkl. Anzeige der aktuellen Woche

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

  • Wochen-Dashboard inkl. Anzeige der aktuellen Woche

    Hi zusammen,

    ich würde gerne mit folgendem Code:

    HTML Code:
    SELECT Woche, Zusagen_Online, Zusagen_Call
    
      from (
            select WEEK(submitted_at) as Woche,
                   sum(case when form_title = 'Digi'  then 1 else 0 end ) AS Zusagen_Online,
                   sum(case when form_title = 'Call'  then 1 else 0 end ) AS Zusagen_Call
            FROM submissions
            WHERE WEEK(submitted_at) >= '25'
            group by Woche        
           )tbl
    die Werte ab der Woche 25 angezeigt bekommen. Das funktioniert soweit auch alles reibungslos. Allerdings passieren zwei Dinge, die ich nicht selber lösen kann:
    1. Es werden auch alle zukünftigen Wochen dargestellt - also bis 52. Hier würde ich gerne immer nur bis zur aktuellen Woche die Daten haben
    2. Die aktuelle Woche wird noch nicht mit Daten befüllt. Die Werte werden nur bis KW 29 dargestellt. Die aktuelle Woche (KW 30) wird hierbei nicht berücksichtigt. Ist es möglich, dass auch die aktuelle Woche mit angezeigt wird, auch wenn diese noch nicht beendet ist?
    Besten Dank für eure Hilfe.

    LG Felix

  • #2

    WHERE
    WEEK(submitted_at) = WEEK(CURDATE())
    or WEEK(submitted_at) = WEEK(CURDATE())-1
    Christian

    Comment


    • #3
      da hätte vielleicht ein Schups gereicht, denn die Wochen schränkt er ja bereits ein.

      Vielleicht ist es spannend, das so umzubauen, dass die Tabellenspalte submitted_at nicht über die Wochenumrechnung (week(..)) angefasst wird, sondern direkt.
      Bei gesetztem Index wäre es sicher viel schneller.

      Comment


      • #4
        Manuell Woche aus Datum errechnen?
        Christian

        Comment


        • #5
          Hi zusammen,

          komme nicht wirklich klar, wie das Statement angepasst werden muss.

          HTML Code:
          SELECT Woche, Zusagen_Online, Zusagen_Call
          
            from (
                  select WEEK(submitted_at) as Woche,
                         sum(case when form_title = 'Digi'  then 1 else 0 end ) AS Zusagen_Online,
                         sum(case when form_title = 'Call'  then 1 else 0 end ) AS Zusagen_Call
                  FROM submissions
                  WHERE WEEK(submitted_at) >= '25' AND WEEK(submitted_at) = WEEK(CURDATE()) or WEEK(submitted_at) = WEEK(CURDATE())-1
                  group by Woche        
                 )tbl
          Nun werden mir nur die Wochen 28 und 29 angezeigt. Woche 30 immer nocht nicht und alles vor 28 auch nicht mehr...

          Was mache ich falsch?

          LG Felix

          Comment


          • #6

            WHERE WEEK(submitted_at) >= '25' AND WEEK(submitted_at) = WEEK(CURDATE()) or WEEK(submitted_at) = WEEK(CURDATE())-1
            vergleiche mit
            WHERE
            WEEK(submitted_at) = WEEK(CURDATE())
            or WEEK(submitted_at) = WEEK(CURDATE())-1
            Christian

            Comment


            • #7
              Alles klar, habe es rausgenommen und nur verwendet:

              HTML Code:
              WHERE WEEK(submitted_at) = WEEK(CURDATE()) or WEEK(submitted_at) = WEEK(CURDATE())-1
              Im Ergebnis werden nur KW 28 und 29 angezeigt. Es werden nicht die laufende Woche (30) angezeigt und auch nicht die Wochen ab KW 25...

              Comment


              • #8
                Wenn ich mich nicht irre ist heute die 30. KW
                WEEK("2019-07-26")
                ergibt 29, weil die Wochen von 0-53 indiziert werden.
                Daraus folgt
                WEEK(CURDATE())+1= aktuelle Woche
                Alles andere lässt sich daraus ableiten

                Da ich nicht davon ausgehe, dass du immer ab der 25. Woche alles willst, sondern aktuelle Woche - X


                WHERE
                WEEK(submitted_at) >= WEEK(CURDATE())-4 and WEEK(submitted_at) <= WEEK(CURDATE())+1

                https://www.w3schools.com/sql/trymys...nc_mysql_week2
                Zuletzt editiert von Christian Marquardt; 26.07.2019, 12:12.
                Christian

                Comment


                • #9
                  Alles klar, verstanden!

                  WHERE WEEK(submitted_at) >= WEEK(CURDATE())-5 or WEEK(submitted_at) = WEEK(CURDATE())

                  So klappt es. Allerdings werden nun nach wie vor die Wochen in der Zukunft angezegit bis inkl. Woche 52.

                  Comment


                  • #10
                    Originally posted by Christian Marquardt View Post
                    Manuell Woche aus Datum errechnen?
                    Nein, die Wochen Berechnung vom Zugriff auf das idealerweise indexierte Feld "submitted_at" entkoppeln.

                    also etwa so, pseudo, analog zu Deinem letzten Vorschlag:
                    where submitted_at between curdate()-28Tage and curdate()


                    Das ist evtl nicht hinreichend, weil curdate als zu klein ist, dann müßte man ggF. dieses Datum in der Zukunft berechnen.
                    Jedenfalls schwör ich, dass es sich absolut lohnt, weil es schneller ist.
                    Solches Vorgehen sollte man sich zur Gewohnheit machen, besonders wenn es einfach zu haben ist.

                    In der Praxis- eine schwach gefüllte Entwicklerdatenbank- ist es wahrscheinlich kaum spürbar, in einem laufenden System mit ein paar Jahren Daten um so eher.

                    Comment


                    • #11
                      Originally posted by Felix_83 View Post
                      Alles klar, verstanden!

                      WHERE WEEK(submitted_at) >= WEEK(CURDATE())-5 or WEEK(submitted_at) = WEEK(CURDATE())

                      So klappt es. Allerdings werden nun nach wie vor die Wochen in der Zukunft angezegit bis inkl. Woche 52.
                      Ein OR ist ja auch was anderes als ein AND.
                      (und = etwas anderes als <=)

                      Comment


                      • #12
                        Besten Dank,

                        so erhalte ich das Ergebnis, welches ich gebraucht habe:

                        WHERE WEEK(submitted_at) >= WEEK(CURDATE())-5 AND WEEK(submitted_at) <= WEEK(CURDATE())

                        LG Felix

                        Comment


                        • #13
                          Originally posted by Felix_83 View Post
                          Besten Dank,
                          der geht an Christian, er hatte es so vorgeschlagen. :-)



                          Probier doch mal die Variante, die ich vorgeschlagen habe.
                          Aus 4*7 = 28 müsste man natürlich
                          5*7 = 35 machen.


                          Comment


                          • #14
                            Hi zusammen,

                            jetzt ist mir doch noch etwas aufgefallen: "Leider" beginnt die Wochenzählung an einem Sonntag mit dieser Bedingung:

                            WHERE WEEK(submitted_at) >= WEEK(CURDATE())-5 AND WEEK(submitted_at) <= WEEK(CURDATE())

                            Was müsste man denn machen, damit das Ganze eine Woche von Montag bis Sonntag betrachtet?

                            LG Felix

                            Comment


                            • #15
                              Also mit meinem Vorschlag aus dem Post #10, also der Verwendung von Tagen (dates), statt week() Function könntest Du diesen Offset problemlos reinbringen.
                              Wenn Du Dir mal gelegentlich die Referenzen zu den Befehlen anschaust, würdest Du auch mindestens eine bequeme Lösung finden:
                              https://www.w3resource.com/mysql/dat...k-function.php

                              Comment

                              Working...
                              X