Разделите месяцы на 4 и получите среднее значение за день

0

Это результат запроса во временной таблице, созданной в сложной хранимой процедуре в MySQL:

Изображение 174551

Цель состоит в том, чтобы иметь среднюю продолжительность в день, как здесь, но каждую неделю по месяцам

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

Как я могу это сделать?

Примечание. Если проще, я могу сделать это с помощью php, так как я буду использовать данные с этим языком.

  • 2
    Не публикуйте свои данные как изображения. Мы не можем работать с изображением. Создайте таблицу данных ascii (форматированный текст) или выполните экспорт и разместите его на sqlfiddle.com ... Также создайте ожидаемый вывод в виде форматированного текста.
  • 1
    Итак, за 28 дней февраля 2018 года вам нужно четыре строки результатов (1-7 февраля, 8-14 февраля, 15-21 февраля, 22-28 февраля)? Но как быть с другими месяцами, дни которых не делятся на 4 без остатка? Должны ли мы смотреть на часовые диапазоны, чтобы получить куски одинаковой продолжительности?
Показать ещё 5 комментариев
Теги:
stored-procedures
date

1 ответ

2
Лучший ответ

У вас есть запрос групп в день, например:

select 
  the_date as day,
  sec_to_time(avg(timestampdiff(second, start_time, end_time))) as duration
from ...
group by the_date;

Вам нужны дни 1-7, 8-14, 15-21, 22-end в месяц вместо этого. Используйте CASE WHEN для создания групп.

select 
  year(the_date) as year,
  month(the_date) as month,
  case 
    when day(the_date) <=  7 then '01-07'
    when day(the_date) <= 14 then '08-14'
    when day(the_date) <= 21 then '15-21'
    else                          '22-end'
  end as day_range,
  sec_to_time(avg(timestampdiff(second, start_time, end_time))) as duration
from ...
group by year, month, day_range
order by year, month, day_range;
  • 0
    Это почти работает, спасибо! Единственная оставшаяся проблема с этой строкой: sec_to_time (avg (timestampdiff (second, start_time, end_time))) Это просто делает среднее, но мне нужно сделать сумму для дней (есть несколько стартов и остановок в день), затем, средняя на неделю. Я попытаюсь сделать выбор из выбора, чтобы решить это
  • 0
    Я добавил некоторые вещи к вашему запросу, чтобы сделать среднюю сумму, и она отлично работает, спасибо за вашу помощь!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню