Announcement

Collapse
No announcement yet.

SQL Abfrage über letzte KW

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

  • SQL Abfrage über letzte KW

    Hi zusammen,

    ich habe einige SQL Abfrage, die sich immer auf die letzte KW beziehen. Dabei muss ich derzeit immer die konkrete Periode (also Startdatum und Enddatum) bei der Abfrage eingeben. Gibt es eine Möglichkeit, dass in SQL so zu programmieren, dass sich SQL immer automatisch auf die letzte KW bezieht?

    Mein Skript sieht derzeit so aus:

    select sum(base_subtotal)
    from sales_flat_order where created_at between '2014-09-08 00:00:00' and '2014-09-14 23:59:59'

    Wäre super wenn jemand was wüsste!

    Grüße!

  • #2
    Aktuelles Datum ( CURDATE() )- 7 Tage ergibt die letzte Woche

    Wenn diese Woche mit der Woche von created_at gleich ist, dann ist das in der gleichen Woche
    Christian

    Comment


    • #3
      Hi Christian,

      danke für die super schnelle Antwort. Aber ich krieg die Syntax iwie nicht hin. Wie würde die in diesem Fall aussehen?

      BG
      Henrik

      Comment


      • #4
        Respekt, dass hast du in nicht mal 4 Min. ausprobiert?

        Wäre ja man wichtig zu wissen, mit welcher DB du arbeitest.

        Ansonsten ergibt WEEK(created_at) die Woche des Feldes aus der Tabelle und WEEK(DATE_SUB(CURDATE(),INTERVAL 7 DAY)) die Woche -7 Tage des aktuellen Datums

        Kann das jetzt hier nicht ausprobieren....
        Christian

        Comment


        • #5
          Okay also ich habe jetzt folgende Syntax:

          select base_subtotal
          from sales_flat_order
          where created_at between (curdate())-7 and (curdate())-1

          ich bekomme auch ein Ergebnis. Bloß bekomme ich nicht die gleiche Summe wie bei der Abfrage zuvor. In der Abfrage zuvor spezifiziere ich den Zeitraum durch die Zusätze 00:00:00 und 23:59:59 ja sehr genau:

          where created_at between '2014-09-08 00:00:00' and '2014-09-14 23:59:59'

          Das ist auch der Grund für die Abweichung. Ohne die genauen Zeiten kommt das gleiche heraus. Jetzt ist die frage wie ich das mit CURDATE ebenfalls so genau hinbekomme?!

          Comment


          • #6
            curtimestamp benutzen und vorher auf 00:00:00 und 23:59:59 setzen
            Christian

            Comment


            • #7
              sorry aber ich muss nochmal fragen...

              current_timestamp gibt mir das aktuelle Datum und die aktuelle Uhrzeit. Wenn ich jetzt von dort aus auf Anfang letzer Woche zurückzähle habe ich ja immer die aktuelle Uhrzeit mit drin. Heißt ich müsste jedes mal ja einen unterschiedlich langen Zeitraum zurückzählen um auf 00:00:00 bzw 23:59:59 zu kommen. Die Abfrage wird teilweise Montagsmorgen aber auch mal Montagsmittags gemacht...

              Comment


              • #8
                Du könntest dir einen Timestamp mit MakeTime basteln. Glaube aber nicht, dass das Problem löst. Woche ist Woche. Und wenn das Datum da drin ist, sollte der Datensatz gezogen werden
                Christian

                Comment


                • #9
                  Hallo,
                  statt:
                  Originally posted by HRGS View Post
                  ...where created_at between '2014-09-08 00:00:00' and '2014-09-14 23:59:59'
                  besser:
                  [highlight=sql]
                  where created_at >= '2014-09-08'
                  and created_at < '2014-09-15'
                  [/highlight]
                  verwenden! Das ist nicht nur genauer, sondern lässt sich dann auch problemlos durch CURDATE() (also ohne Zeitanteil) ersetzen.

                  Anmerkung:
                  Wenn es nur darum geht die Datumsanteile zu vergleichen, dann genügt es auch auf beiden Seiten die Datumsanteile wegzulassen. Also wäre auch sowas möglich:
                  [highlight=sql]
                  where DATE(created_at) between '2014-09-08' and '2014-09-14'
                  [/highlight]

                  Gruß Falk
                  Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                  Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                  Comment


                  • #10
                    Frage am Rande:
                    Ist es unter mySQL state of the art, Datumswerte mittels impliziter Konvertierung mit Text zu vergleichen?
                    Gruß, defo

                    Comment


                    • #11
                      Hallo,
                      Originally posted by defo View Post
                      ...Ist es unter mySQL state of the art, Datumswerte mittels impliziter Konvertierung mit Text zu vergleichen?
                      ein String der Form 'YYYY-MM-DD' ist unter MySQL imho ein Datumswert. Es gibt keine Funktion, mit der ich einen String explizit in einen Datumswert umwandeln könnte.

                      Gruß Falk
                      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                      Comment

                      Working...
                      X