Вычисление увеличения или уменьшения тренда с течением времени в MySQL - PullRequest
5 голосов
/ 22 июня 2011

У меня есть таблица store_visits со следующей структурой:

store_visits:
 store_name: string
 visit_count: integer
 visit_date: date

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

  • Среднее количество посещений за диапазон дат (в настоящее время используется AVG(visit_count))
  • Увеличивается или уменьшается посещение магазина
  • Относительная скорость увеличения / уменьшения (шкала от 1 до 4, где1 = низкая скорость, 4 = высокая скорость)

Относительная скорость увеличения / уменьшения посещений предназначена только для направленных целей.Это всегда будет линейный масштаб.

Я провел целый день, пытаясь построить запрос MySQL, чтобы сделать это, и просто не могу разобраться с этим.

Любая помощь будетс благодарностью.

Спасибо, Скотт

1 Ответ

4 голосов
/ 22 июня 2011

Предполагая, что вы просто хотите сравнить посещения магазина в первой половине диапазона дат со второй половиной, вот пример, который охватывает последние 40 дней, используя 2 подзапроса, чтобы получить количество для каждого диапазона.

select 
  ((endVisits + startVisits)/40) average, 
  (endVisits > startVisits) increasing, 
  ((endVisits - startVisits)/(startVisits) * 100) percentChange 
from 
  (select sum(visit_count) startVisits 
    from store_visit 
    where 
      visit_date > current_date - 40 
      and visit_date <= current_date - 20) startRange,
  (select sum(visit_count) endVisits 
    from store_visit 
    where  
      visit_date > current_date - 20) endRange;

Примечания

Я не знаю, где, как вы хотите рассчитать сумму увеличения 1-4, поэтому я просто сделал процент и выможет изменить это к любой логике, которую вы хотите.Кроме того, вам нужно будет обновить диапазоны дат в подзапросах по мере необходимости.

Редактировать: Просто обновил среднее значение ((endVisits + startVisits) / 40) вместо ((endVisits + startVisits) / 2).Вы также можете использовать функцию avg в своих подзапросах и разделить их сумму на 2, чтобы получить среднее значение за весь период.

...