Вычисление увеличения или уменьшения тренда с течением времени в 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, чтобы получить среднее значение за весь период.