Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Warum die folgende SQL Server-Abfrage 12-Monats-Daten und nicht 14-Monats-Daten zurückgibt

Sie müssen sowohl nach Monats- als auch nach Jahresteilen von ad.xDate gruppieren. Es gibt nur zwölf Monate im Jahr und Sie sollten die frühesten zwei (14 - 2) Monate Ihrer Ergebnisse mit zu hohen Summen sehen, da sie eigentlich eine Kombination aus zwei Kalendermonaten darstellen.

Es hat in Ihrer ursprünglichen Version funktioniert, da jeder Monat mehr als 14 Tage hat. Wenn Sie versucht haben, diese alte Abfrage über 31 Tage (oder 28, 29, 30 für einige Monate) hinaus zu verlängern, finden Sie das gleiche Problem wieder.

...
SELECT
    'playing' As activity,
    min(ad.xDate) As xDate, 
    Isnull(sum(t.TimePerDay), 0) As TimePerDay
FROM AllDates As ad Left Outer Join @test As t On ad.xDate = t.date
GROUP BY Year(ad.xDate), Month(ad.xDate) /* <--- change here */
ORDER BY xDate