kumulierte Summe von Anzahl Datum

Mr. Robot

Fleissiger Benutzer
Beiträge
88
Hallo zusammen,

ich möchte gerne einer Spalte mit Datumsfeldern eine 1 zuordnen und dann die kumulierte Summe bilden. Also um die Anzahl von Datumsfeldern zu ermitteln.

19.08.2020 1 1
19.08.2020 1 2
19.08.2020 1 3
20.08.2020 1 4
11.09.2020 1 5

Also suche etwas wie:

SUM(COUNT(Datum)) OVER (ORDER BY Datum ASC) AS running

Sollte nicht schwer sein oder?
 
Werbung:
Werbung:
Hallo,

wenn du die Anzahl der eingetragenen Datums-Felder ermittelt willst, reicht dazu ein einfacher COUNT aus.
Das kann auch innerhalb einer Abfrage ohne Gruppierung über eine Fensterfunktion gelöst werden, wie du sie benutzt hast (OVER-Klausel).

Wenn du nur sie unterschiedliche Anzahl von Datums-Einträgen haben möchtest, dann geht das über einen COUNT(DISTINCT Datum), was dann aber nicht mehr mit einer Fensterfunktion geht.

Hängt also ein wenig davon ab, was für ein Ergebnis du wirklich brauchst.
Willst du nur Grundsätzlich die Anzahl ermitteln, so reicht ein COUNT(*), wenn der Wert in jeder Rückgabezeile stehen soll, dann musst du die Fensterfunktion benutzen.

Hier mal ein kleines Beispiel, mit dem man die Funktionen nachvollziehen kann:

Code:
DECLARE @I int = 1, @MAX int = 12, @SW int, @Datum date

DECLARE @TA TABLE
(
    Nr int IDENTITY(1,1),
    Datum date,
    SonstigerWert int
)
INSERT INTO @TA (Datum, SonstigerWert)
VALUES
('2020-10-04',-34),
('2020-08-09',-63),
('2020-10-04',-7),
('2020-08-26',-46),
(NULL,-46),
('2020-09-21',-20),
(NULL,-86),
('2020-07-14',-89),
(NULL,-87),
('2020-10-10',-1),
('2020-10-10',-70),
(NULL,-72)


-- Ermittlung der Gesamt-Zahlen
SELECT
COUNT(*) as AnzahlDatensätzeGesamt,
COUNT(Datum) as AnzahlEingetragenesDatum,
COUNT(DISTINCT Datum) as AnzahlEingetragenesUnterschiedlichesDatum
FROM @TA

-- Ermittlung der Gesamt-Zahlen für jede Datenzeile (ohne Partitionierung im der Fensterfunktion)
;WITH cte_DistinctDatum
AS
(
    SELECT COUNT(DISTINCT Datum) as AnzahlEingetragenesUnterschiedlichesDatum FROM @TA
)
SELECT Nr, Datum,
COUNT(*) OVER (ORDER BY SIGN(a.Nr)) as AnzahlDatensätzeGesamt,
COUNT(a.Datum)  OVER (ORDER BY SIGN(a.Nr)) as AnzahlEingetragenesDatum,
b.AnzahlEingetragenesUnterschiedlichesDatum
FROM @TA a

CROSS APPLY cte_DistinctDatum b

Bei Fragen - einfach posten.

Viele Grüße,
Tommi
 
Zurück
Oben