SQL Query mit Datumsbehandllung

:)
Hi und danke nochmal
Beispiel 07.01.2016 bei mir kommt 4 raus
Bei dir 2016-01-07 00:00:00.000 5

Beispiel 31.01.2016 bei mir kommt 0 raus
Bei dir 2016-01-31 00:00:00.000 3
 
Werbung:
:)
Hi und danke nochmal
Beispiel 07.01.2016 bei mir kommt 4 raus
Bei dir 2016-01-07 00:00:00.000 5

Beispiel 31.01.2016 bei mir kommt 0 raus
Bei dir 2016-01-31 00:00:00.000 3
Der 07.01.2016 steckt in diesen Zeiträumen
2016-01-01 2016-01-07 BNDL
2016-01-01 2016-12-31 BNDL
2016-01-04 2016-01-21 BNDL
2016-01-05 2016-01-10 BNDL
2016-01-05 2016-01-13 BNDL

Der 31.01.2016 steckt in diesen Zeiträumen
2016-01-01 2016-12-31 BNDL
2016-01-10 2016-12-31 BNDL
2016-01-28 2016-12-31 BNDL

Ich weiß nicht wie du gerechnet hast aber ich kann nachvollziehen warum aus diesen Testdaten 5 und 3 raus kommt.
 
Code:
WITH tabelle(ID,Datestart,Dateend,[Type]) AS (
   SELECT 1,cast('2016-01-01' AS DATE),cast('2016-01-07' AS DATE),'BNDL' UNION ALL
   SELECT 2,'2016-01-01','2016-12-31','BNDL' UNION ALL
   SELECT 3,'2016-01-04','2016-01-21','BNDL' UNION ALL
   SELECT 4,'2016-01-05','2016-01-10','BNDL' UNION ALL
   SELECT 5,'2016-01-05','2016-01-13','BNDL' UNION ALL
   SELECT 6,'2016-01-10','2016-12-31','BNDL' UNION ALL
   SELECT 7,'2016-01-10','2016-01-15','BNDL' UNION ALL
   SELECT 8,'2016-01-28','2016-12-31','BNDL'
   ), liste(ID,Datestart,Dateend) AS (
   SELECT   t.ID,
       t.Datestart,
       t.Dateend
   FROM   tabelle t
   UNION ALL
   SELECT   liste.ID,
       dateadd(day,1,liste.Datestart),
       liste.Dateend
   FROM   liste
   WHERE   dateadd(day,1,liste.Datestart) < liste.Dateend
   ), basisliste(Datum) AS (
   SELECT   dateadd(yyyy,datediff(yyyy,0,getdate()),0)
   UNION ALL
   SELECT   dateadd(day,1,basisliste.Datum)
   FROM   basisliste
   WHERE   datepart(yyyy,dateadd(day,1,basisliste.Datum)) = datepart(yyyy,getdate())
   )
SELECT   b.Datum,
     sum(CASE WHEN l.Datestart IS NULL THEN 0 ELSE 1 END) AS Saldo
FROM   basisliste b
LEFT JOIN liste l
ON     b.Datum = l.Datestart
WHERE   datepart(mm,b.Datum) = 1
GROUP BY b.Datum
OPTION   (MAXRECURSION 1000);
Datum Saldo
----------------------- -----------
2016-01-01 00:00:00.000 2
2016-01-02 00:00:00.000 2
2016-01-03 00:00:00.000 2
2016-01-04 00:00:00.000 3
2016-01-05 00:00:00.000 5
2016-01-06 00:00:00.000 5
2016-01-07 00:00:00.000 4
2016-01-08 00:00:00.000 4
2016-01-09 00:00:00.000 4
2016-01-10 00:00:00.000 5
2016-01-11 00:00:00.000 5
2016-01-12 00:00:00.000 5
2016-01-13 00:00:00.000 4
2016-01-14 00:00:00.000 4
2016-01-15 00:00:00.000 3
2016-01-16 00:00:00.000 3
2016-01-17 00:00:00.000 3
2016-01-18 00:00:00.000 3
2016-01-19 00:00:00.000 3
2016-01-20 00:00:00.000 3
2016-01-21 00:00:00.000 2
2016-01-22 00:00:00.000 2
2016-01-23 00:00:00.000 2
2016-01-24 00:00:00.000 2
2016-01-25 00:00:00.000 2
2016-01-26 00:00:00.000 2
2016-01-27 00:00:00.000 2
2016-01-28 00:00:00.000 3
2016-01-29 00:00:00.000 3
2016-01-30 00:00:00.000 3
2016-01-31 00:00:00.000 3

(31 Zeile(n) betroffen)
Das wären dann 4 am 07.01.2016 und immernoch 3 am 31.01.2016 wobei du jetzt vom 31.12. sprichst, da sind es natürlich 0 Datensätze.
 
Werbung:
Zurück
Oben