Как рассчитать среднесуточное значение из совокупных результатов с SQL? - PullRequest
0 голосов
/ 16 февраля 2019

Я работаю над выводом некоторых данных и хочу вывести среднесуточное число из некоторых чисел.

Data Sample

Как видите, я хочу посчитатьколичество полученных строк / результатов (представьте идентификатор строки), а затем разделите его на дневное значение, чтобы получить среднесуточное значение. (30/1), (64/2) и т. д. Я перепробовал все, но продолжаю сталкиваться сстена с этим.

В нынешнем виде, я думаю, чтобы сделать эту работу, нужен какой-то подзапрос.Я просто не знаю, как заставить день (идентификатор строки 1,2,3,4 и т. Д.) Использовать для деления.

SELECT calendar_date, SUM(NY_dayscore * cAttendance) 
FROM  vw_Appointments 
WHERE status = 'Confirmed'
Group by calendar_date  

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

SUM(NY_dayscore * cAttendance) ) / count(distinct calendar_date)

Мой оригинальный код длинный и cba опубликовать все это.Так что просто попытайтесь опубликовать небольшой пример кода, чтобы получить руководство по этой проблеме.

Ответы [ 3 ]

0 голосов
/ 16 февраля 2019

Это ROW_NUMBER(), что вам не хватает?

SELECT 
  calendar_date, 
  SUM(NY_dayscore * cAttendance) / (ROW_NUMBER() OVER (ORDER BY calendar_date ASC)) AS average
FROM  vw_Appointments 
WHERE status = 'Confirmed'
GROUP BY calendar_date
ORDER BY calendar_date
0 голосов
/ 16 февраля 2019

В SQL Server 2012+ вы бы использовали совокупное среднее значение:

select calendar_date, sum(NY_dayscore * cAttendance),
       avg(sum(NY_dayscore * cAttendance)) over (order by calendar_date) as running_average
from vw_appointments a
where status = 'Confirmed'
group by calendar_date
order by calendar_date;

В SQL Server 2008 это сложнее:

with a as (
      select calendar_date, sum(NY_dayscore * cAttendance) as showed
      from vw_appointments a
      where status = 'Confirmed'
      group by calendar_date
     )
select a.*, a2.running_average
from a outer apply
     (select avg(showed) as running_average
      from a a2
      where a2.calendar_date <= a.calendar_date
     ) a2
order by calendar_date;
0 голосов
/ 16 февраля 2019

Я думаю, вам нужно sum(showed) over (..)/row_number() over (..)

WITH Table1(date, showed) AS
(
 SELECT '2019-01-02', 30 UNION ALL
 SELECT '2019-01-03', 34 UNION ALL
 SELECT '2019-01-03', 41 UNION ALL
 SELECT '2019-01-04', 48
)
SELECT date, 
       sum(showed) over (order by date) / 
       row_number() over (order by date)
       as daily_average
 FROM Table1
GROUP BY showed, date;

date        daily_average
2019-01-02  30
2019-01-03  52
2019-01-03  35
2019-01-04  38

Демо

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