MSSQL: tägliche Berechnung rückwirkend für das Vormonat
Hallo Leute!
Ich habe derzeit eine Berechnung von Daten des Vortages.
Nun muss ich aber Rückwirkend das Vormonat jeden Tag einzeln berechnen.
Könnt Ihr mir vielleicht weiterhelfen wie ich das am besten hinbekommen kann?
Ich dachte mir, ich lese die Tage des Vormonates aus:
declare @d datetime
declare @tag as varchar(2)
set @d = dateadd(month, -1, CONVERT (date, GETDATE()))
select 32-day(@d-day(@d)+32)
Set @tag = 1
Und mache eine Loop
While @tag = @d
Begin
(Berechnung von Daten wo Monat-1 und Tag=@Tag)
Set @tag = @tag +1;
END;
Was haltet ihr davon?
Oder gibt's eine bessere Lösung?
Lg, Solardub
Ich habe derzeit eine Berechnung von Daten des Vortages.
Nun muss ich aber Rückwirkend das Vormonat jeden Tag einzeln berechnen.
Könnt Ihr mir vielleicht weiterhelfen wie ich das am besten hinbekommen kann?
Ich dachte mir, ich lese die Tage des Vormonates aus:
declare @d datetime
declare @tag as varchar(2)
set @d = dateadd(month, -1, CONVERT (date, GETDATE()))
select 32-day(@d-day(@d)+32)
Set @tag = 1
Und mache eine Loop
While @tag = @d
Begin
(Berechnung von Daten wo Monat-1 und Tag=@Tag)
Set @tag = @tag +1;
END;
Was haltet ihr davon?
Oder gibt's eine bessere Lösung?
Lg, Solardub
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 400468
Url: https://administrator.de/forum/mssql-taegliche-berechnung-rueckwirkend-fuer-das-vormonat-400468.html
Ausgedruckt am: 19.02.2025 um 21:02 Uhr
10 Kommentare
Neuester Kommentar
Hallo Solardub,
das kommt drauf an wie deine Daten vorliegen.
Mach doch deine Berechnung mit:
Es wäre auch hilfreich, wenn du das "Nun muss ich aber Rückwirkend das Vormonat jeden Tag einzeln berechnen." mal in verständliches Deutsch überträgt. 
Dann versteht man besser, was du willst.
grüsse vom it-frosch
das kommt drauf an wie deine Daten vorliegen.
Mach doch deine Berechnung mit:
sum (x+y) where datediff(day,@d,current_timestamp)=30
sum(x+y) where datediff(month,@d,current_timestamp)=1
Dann versteht man besser, was du willst.
grüsse vom it-frosch
Kannst du mal einen Beispiel geben in welcher Form die aktuellen Datensätze und die des Vormonats vorliegen. Grundsätzlich kannst du die Daten zusammen joinen oder aggregieren, je nachdem wie die Daten aufgebaut sind.
Loop ist so ziemlich das letzte was man in SQL machen sollte, es gibt eigentlich nichts was langsammer und anfälliger arbeitet.
Loop ist so ziemlich das letzte was man in SQL machen sollte, es gibt eigentlich nichts was langsammer und anfälliger arbeitet.
Das sind ja keine Datensätze sondern eine Abfrage bzw. eigentlich keine Abfrage sondern eine Schleife mit ~31 Abfragen, Gruppierungen und Inserts also maximal unperformant.
Das kannst du schon ganz einfach kürzen und alle Datensätze die so entstehen mit
einfügen. Dann bleiben aber Fragen wie z.B. wiso fügst du das in die Tabelle ein? Wiso nicht nur ein Select oder eine View.
Das kannst du schon ganz einfach kürzen und alle Datensätze die so entstehen mit
INSERT INTO [dev_LMTag]
Select
lag_AnlieferungsDatum
, lag_Artikel_Nr
, SUM(CASE WHEN lag_kz_zu_abgang = 'A' THEN lag_menge ELSE 0 END) - SUM(case WHEN lag_kz_zu_abgang = 'Z' THEN lag_menge ELSE 0 END) AS Menge
, lag_KostenStelle
from dbo.Lager
where ((lag_Artikel_Nr between 1000 and 4499) OR (lag_Artikel_Nr BETWEEN 8100 AND 8500))
and ((lag_KostenStelle between 1 AND 299) OR (lag_KostenStelle between 320 AND 349))
AND lag_AnlieferungsDatum BETWEEN dateadd(month,-1,getdate()) AND getdate()
group by lag_AnlieferungsDatum, lag_Artikel_Nr, lag_KostenStelle