Как рассчитать среднесуточное значение по кварталам - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть таблица Order в нашей базе данных, в которой есть столбцы, включающие order_nbr, create_ts и т. Д.

. Рассчитать среднесуточное количество заказов в день просто, используя следующий SQL

select avg(cnt)
from 
(  
  select date(create_ts) dt, count(distinct order_nbr)
  from order
  group by date(create_ts)
)

Что делать, если я хочу построить график среднесуточного по сравнению с кварталом?Как мне оценить среднее значение за определенный период времени?Для целей презентации это была бы гистограмма с дневным средним значением в качестве оси y и кварталов (2017Q3, 2017Q4, 2018Q1, 2018Q2) в качестве оси x.

Все, что я могу думать, это то, что это будет avg из avg над рабочим окном, которое длится 90 дней.Еще одна мысль, возможно, создать таблицу размеров Date.Таким образом, каждая дата будет иметь соответствующее название квартала.Мне не ясно, как написать SQL-запрос для этого.

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Вы можете просто использовать функции YEAR() и QUARTER() и группировать по ним?

SELECT
  YEAR(   DATE(create_ts))   AS YearID,
  QUARTER(DATE(create_ts))   AS QuarterID,
  COUNT(DISTINCT order_nbr)
FROM
  order
GROUP BY
  YEAR(   DATE(create_ts)),
  QUARTER(DATE(create_ts))
0 голосов
/ 19 сентября 2018

Для построения среднесуточного значения v / s Quarter, вам необходимо вычислить среднее значение среднесуточных значений за квартал и сгруппировать их по кварталу.

Чтобы получить квартал, соответствующий дате, вы можете использовать функцию Quarter () .

Попробуйте выполнить следующий запрос:

SELECT 
  YEAR(inner_nest.dt) AS yr, 
  QUARTER(inner_nest.dt) AS qtr, 
  AVG(inner_nest.daily_avg) AS daily_avg_qtrwise 
FROM 
(
 SELECT 
   DATE(create_ts) AS dt, 
   COUNT(DISTINCT order_nbr) AS daily_avg 
 FROM order 
 GROUP BY DATE(create_ts) 
) 
GROUP BY 
  YEAR(inner_nest.dt), 
  QUARTER(inner_nest.dt)

Обратите внимание , что Quarter () функция возвращает номер квартала только для определенного года.Таким образом, вам нужно будет использовать номер года (год) вместе с номером квартала (qtr), чтобы определить конкретный квартал.

0 голосов
/ 19 сентября 2018

Вам нужно добавить только один раздел в запрос, чтобы отфильтровать результаты по диапазону дат.Примените оператор WHERE, чтобы выбрать поля и результаты для фильтрации, затем используйте оператор AND, чтобы применить дополнительные фильтры.

Например:

select avg(cnt)
from
(
  select date(create_ts) dt, count(distinct order_nbr)
  from order
  where date(create_ts) >= date(START_DATE) and date(create_ts) <= date(END_DATE)
  group by date(create_ts)
)

Это означает, что вам потребуется отдельныйзапрос для каждого квартала.

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