Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

SQL Abfrage über letzte KW

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von HRGS85, 15 September 2014.

  1. HRGS85

    HRGS85 Benutzer

    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_orderwhere 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. akretschmer

    akretschmer Datenbank-Guru

    Schnellschuß in PostgreSQL:

    Code:
    test=*# select current_date - 6 - extract(dow from current_date)::int as von, current_date  - extract(dow from current_date)::int as bis;
      von  |  bis
    ------------+------------
     2014-09-08 | 2014-09-14
    (1 row)
    
    oder als timestamp:

    Code:
    test=*# select (current_date - 6 - extract(dow from current_date)::int)::timestamp as von, (current_date +1 - extract(dow from current_date)::int) - '1second'::interval as bis;
      von  |  bis
    ---------------------+---------------------
     2014-09-08 00:00:00 | 2014-09-14 23:59:59
    (1 row)
    
     
  3. ukulele

    ukulele Datenbank-Guru

    Wie wäre es mit sowas hier:
    Code:
    BETWEEN    now() - weekday(now()) - 7 AND now()-weekday(now())
    In Tagen gerechnet. Die Uhrzeiten müsste man noch etwas anpassen, leider hab ich grad kein MySQL zum testen.
     
  4. HRGS85

    HRGS85 Benutzer

    @ukulele: Ja das Problem dabei ist, dass sich durch now() immer die Uhrzeit in der die Abfrage gemacht wird mit durchschleift. Ich möchte aber, dass die Uhrzeit beim Startdatum immer 00:00:00 ist und beim Enddatum 23:59:59. Die Abfrage kann auch zu unterschiedlichen Zeiten durchgeführt werden. Also bsp. Montag morgen oder Montag nachmittag oder so.

    @akretschmer: Bei der Syntax bekomme ich einen Fehler in der Nähe von 'dow from current_date)'....
     
  5. ukulele

    ukulele Datenbank-Guru

    Um den Zeitanteil "grade zu biegen" hab ich heute noch hier gepostet wie ich es unter MSSQL mache:
    http://www.datenbankforum.com/threa...um-uhrzeit-auf-heute-2-tage-um-23-59-59.2013/
    Ich konvertiere quasi now() von DATETIME nach INT und erhalte durch Rundung Tage in ganzen Zahlen. Dann könnte man noch wie oben weekday(now()) und 7 Tage abziehen und hätte den ersten Tag der vorherigen Kalenderwoche. Das ganze konvertierst du zurück nach DATETIME und der Zeitanteil steht auf 0. Für das Zeitraum Ende müsstest du dann am Ende noch eine Millisekunde abziehen oder so.

    Wie im anderen Post geschrieben würde ich auf Konvertierungen in Text und zurück verzichten, da kommt es dann plötzlich auf Ausgabeformate und Spracheinstellungen der DB an :eek:
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Ja. Ich hab kein MySQL. Wowereit! Ich weiß nicht, ob es eine Alternative dazu in MyZettelkasten gibt, konsultiere bitte die Doku.
     
  7. HRGS85

    HRGS85 Benutzer

    @ukulele: ok vom Prinzip versteh ichs. Wenn ich dein Statement:

    SELECT dateadd(second,-1,dateadd(day,3,cast(cast(getdate() AS INT) AS DATETIME)))

    bei mir in den HeidiSQL Klienten kopiere kommt ein Syntaxfehler. Ich habe also mal das Statement auseinander genommen. Bereits hier kriege ich nen Fehler:

    select (now() AS INT)

    @akretschmer: was meinste mit Doku?
     
  8. akretschmer

    akretschmer Datenbank-Guru

    Die Dokumentation, das unbekannte Wesen ...
     
    Hony% gefällt das.
  9. ukulele

    ukulele Datenbank-Guru

    Natürlich das ist ja auch MSSQL. Ich kenne die MySQL Syntax nicht sehr gut, weiß aber z.B. das die Funktion getdate() in MySQL in etwa now() entspricht. cast() gibt es wohl auch (ich kann in die Doku schauen
    http://dev.mysql.com/doc/refman/5.1/de/charset-convert.html ) und dateadd() scheint soviel zu sein wie date_add() bzw. adddate(), funktioniert aber offenbar etwas anders. http://dev.mysql.com/doc/refman/5.1/de/date-and-time-functions.html

    Ich habe kein MySQL zum testen, daher müsstest du die Syntax anhand der Doku auf MySQL anpassen.
     
  10. HRGS85

    HRGS85 Benutzer

    okay thx für deinen typ ukulele. Habs letztlich etwas anders aber in der Richtung so gemacht:

    concat_ws(' ',SUBSTRING(date_add(now(),Interval-7DAY),1,10),'00:00:00')

    top!
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden