Получение средних по часу / дню - PullRequest
0 голосов
/ 17 апреля 2019

У меня следующий запрос, в котором я пытаюсь получить среднее количество часов по дням.Я получаю итоги без проблем, но я не могу получить среднее значение.

Может кто-нибудь увидеть, что я делаю неправильно с приведенным ниже запросом, а также как я могу получить результаты вследующий формат?

SELECT 
    [Day], 
    [Hour], 
    [DayN], 
    Totals,
    AVG(Totals) AS [Avg]
FROM
  (
        SELECT 
          [Day]  = DATENAME(WEEKDAY, StartDate),
          [DayN] = DATEPART(WEEKDAY, StartDate),
          [Hour] = DATEPART(HOUR,StartDate),
          Totals = COUNT(*)
        from 
            Visit
        where
            StartDate >= '01 Jan 2019'
        GROUP BY 
          DATENAME(WEEKDAY,StartDate),
          DATEPART(WEEKDAY,StartDate),
          DATEPART(HOUR,StartDate)
  ) AS q
GROUP BY [Day], [Hour], Totals, [DayN]
ORDER BY DayN; 

enter image description here

Пример данных: (подробнее на https://justpaste.it/65w8z)

CREATE TABLE [dbo].[Visit](
    [VisitID] [int] NOT NULL,
    [StartDate] [datetime] NULL
)

GO
INSERT [dbo].[Visit] ([VisitID], [StartDate]) VALUES (30513, CAST(N'2019-01-01T00:06:28.480' AS DateTime))
GO
INSERT [dbo].[Visit] ([VisitID], [StartDate]) VALUES (30514, CAST(N'2019-01-01T00:07:23.637' AS DateTime))
GO
INSERT [dbo].[Visit] ([VisitID], [StartDate]) VALUES (30515, CAST(N'2019-01-01T00:14:44.840' AS DateTime))
GO
INSERT [dbo].[Visit] ([VisitID], [StartDate]) VALUES (30516, CAST(N'2019-01-01T00:16:05.030' AS DateTime))
GO
INSERT [dbo].[Visit] ([VisitID], [StartDate]) VALUES (30517, CAST(N'2019-01-01T00:18:23.787' AS DateTime))
GO
INSERT [dbo].[Visit] ([VisitID], [StartDate]) VALUES (30518, CAST(N'2019-01-01T00:20:33.073' AS DateTime))
GO
INSERT [dbo].[Visit] ([VisitID], [StartDate]) VALUES (30519, CAST(N'2019-01-01T00:20:42.450' AS DateTime))
GO
INSERT [dbo].[Visit] ([VisitID], [StartDate]) VALUES (30520, CAST(N'2019-01-01T00:25:03.303' AS DateTime))
GO

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Попробуйте это вам нужно, чтобы получить avg отдельно, пожалуйста, запустите это

SELECT [Day], [Hour], [DayN], Totals, (
SELECT avg(totals)
FROM
  ( SELECT  [Day]  = DATENAME(WEEKDAY, StartDate),
            [DayN] = DATEPART(WEEKDAY, StartDate),
            [Hour] = DATEPART(HOUR,StartDate),
            Totals = COUNT(*)
   FROM Visit
   WHERE StartDate >= '01 Jan 2019'
   GROUP BY DATENAME(WEEKDAY,StartDate),
            DATEPART(WEEKDAY,StartDate),
            DATEPART(HOUR,StartDate) ) AS qq
WHERE q.[day]=qq.[day]) [Avg]
  FROM
    ( SELECT  [Day]  = DATENAME(WEEKDAY, StartDate),
              [DayN] = DATEPART(WEEKDAY, StartDate),
              [Hour] = DATEPART(HOUR,StartDate),
              Totals = COUNT(*)
     FROM Visit
     WHERE StartDate >= '01 Jan 2019'
     GROUP BY DATENAME(WEEKDAY,StartDate),
              DATEPART(WEEKDAY,StartDate),
              DATEPART(HOUR,StartDate) ) AS q
ORDER BY DayN;
0 голосов
/ 17 апреля 2019

попробуйте это:

SELECT 
    [Day], 
    [Hour], 
    [DayN], 
    Totals,
    AVG(Totals) AS [Avg],
    A
FROM
  (
        SELECT 
          [Day]  = DATENAME(WEEKDAY, StartDate),
          [DayN] = DATEPART(WEEKDAY, StartDate),
          [Hour] = DATEPART(HOUR,StartDate),
          Totals = COUNT(*),
          COUNT(1)/Count(distinct DATEPART(HOUR, StartDate))  A
        from 
            Visit
        where
            StartDate >= '01 Jan 2019'
        GROUP BY 
          DATENAME(WEEKDAY,StartDate),
          DATEPART(WEEKDAY,StartDate),
          DATEPART(HOUR,StartDate)
  ) AS q
GROUP BY [Day], [Hour], Totals, [DayN],A
ORDER BY DayN;

вам нужно AVG(Totals) AS [Avg] больше?если вы не можете удалить 2 последние строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...