Вычисление увеличения или уменьшения тренда с течением времени в MySQL

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

store_visits:
 store_name: string
 visit_count: integer
 visit_date: date

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

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

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

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

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

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

1 ответ

Решение

Предполагая, что вы просто хотите сравнить посещения магазина в первой половине диапазона дат со второй половиной, вот пример, который охватывает последние 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, чтобы получить среднее значение за весь период.

Другие вопросы по тегам