Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dlaczego poniższe zapytanie SQL Server zwraca dane z 12 miesięcy, a nie z 14 miesięcy?

Musisz pogrupować według miesiąca i roku części ad.xDate. Jest tylko dwanaście miesięcy w roku i powinieneś zobaczyć najwcześniejsze dwa (14 - 2) miesiące wyników z sumami, które są zbyt duże, ponieważ w rzeczywistości reprezentują one kombinację dwóch miesięcy kalendarzowych.

To działało w Twojej oryginalnej wersji, ponieważ w każdym miesiącu jest więcej niż 14 dni. Jeśli próbowałeś przedłużyć to stare zapytanie o więcej niż 31 dni (lub 28, 29, 30 przez kilka miesięcy), ponownie napotykasz ten sam problem.

...
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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Użyj PARSENAME(), aby zwrócić część nazwy obiektu w SQL Server

  2. Pobieranie wieloetapowej operacji generowało błędy. Sprawdź każdą wartość statusu. błąd podczas używania ADO z serwerem SQL 2008

  3. Musisz wyświetlić listę wszystkich wyzwalaczy w bazie danych SQL Server wraz z nazwą tabeli i schematem tabeli

  4. Usługa nie została całkowicie zatrzymana po ServiceController.Stop()

  5. Użyj smo do zmiany nazwy plików danych