SQL Abfrage über letzte KW

HRGS85

Benutzer
Beiträge
23
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!
 
Werbung:
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!

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)
 
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.
 
@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)'....
 
Um den Zeitanteil "grade zu biegen" hab ich heute noch hier gepostet wie ich es unter MSSQL mache:
https://www.datenbankforum.com/thre...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:
 
@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?
 
SELECT dateadd(second,-1,dateadd(day,3,cast(cast(getdate() AS INT) AS DATETIME)))

bei mir in den HeidiSQL Klienten kopiere kommt ein Syntaxfehler.
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.
 
Werbung:
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!
 
Zurück
Oben