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

TSQL:nie można wykonać funkcji agregującej AVG na COUNT(*), aby znaleźć najbardziej ruchliwe godziny dnia

Korzystanie z widoku wbudowanego:

SELECT DATEPART(hh, x.visitdate),
       AVG(x.num)
  FROM (SELECT t.visitdate,
               COUNT(*) 'num'
          FROM CUSTOMERLOG t
         WHERE t.visitdate BETWEEN 'Jan 1 2009' AND 'Aug 1 2009'
      GROUP BY t.visitdate) x
GROUP BY DATEPART(hh, x.visitdate)

Używając odpowiednika CTE (SQL Server 2005+):

WITH visits AS (
   SELECT t.visitdate,
          COUNT(*) 'num'
     FROM CUSTOMERLOG t
    WHERE t.visitdate BETWEEN 'Jan 1 2009' AND 'Aug 1 2009'
 GROUP BY t.visitdate)
   SELECT DATEPART(hh, x.visitdate),
         AVG(x.num)
    FROM visits x
GROUP BY DATEPART(hh, x.visitdate)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przekonwertować godzinę DATEPART, która jest czasem wojskowym dla północy (00) na wartość, której mogę użyć, gdy potrzebuję jej do obliczeń?

  2. Jaki jest najlepszy sposób na zapewnienie integralności referencyjnej replikowanej bazy danych?

  3. Jak mogę wstawić więcej niż 8000 znaków w kolumnie VARCHAR(MAX) za pomocą ExecuteNonQuery?

  4. Jak znaleźć domyślną lokalizację plików danych i plików dziennika w programie SQL Server?

  5. Czy SQL Server optymalizuje obliczenia DATEADD w zapytaniu wybierającym?