sql >> Databasteknik >  >> RDS >> Sqlserver

Varför följande SQL Server-fråga returnerar 12 månaders data och inte 14 månaders data

Du måste gruppera efter både månad och år delar av ad.xDate. Det finns bara tolv månader på året och du bör se de tidigaste två (14 - 2) månaderna av dina resultat med summor som är för stora eftersom de faktiskt representerar en kombination av två kalendermånader.

Det fungerade i din ursprungliga version eftersom det är mer än 14 dagar i en månad. Om du försökte förlänga den gamla frågan utöver 31 dagar (eller 28, 29, 30 under några månader) så hittar du samma problem igen.

...
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


  1. Hur resultaten blandas mellan två tabeller när du använder UNION

  2. Eventuella nackdelar med att använda ExecuteReaderAsync från C# AsyncCTP

  3. Objektet i klassen yii\db\Command kunde inte konverteras till sträng

  4. Inloggade användare loggas ut efter en tid