Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

Требуется написать скрипт для усреднения данных экспериментов, занося итоговые данные в отдельную таблицу:

Исходная таблица:

id- id

month - месяц от 1 до 12

day - день - от 1 до 31

ex - 0 или 1

t - целое число от -255 до 255

p - целое число от 0 до 1000

o - дробное число от 0 до 1, 2 знака после запятой

e - целое число от 0 до 3

y - дробное число от -255 до 255, 6 знаков после запятой

x - дробное число от -255 до 255, 6 знаков после запятой

place_id - id эксперимента

Требуется усреднить данные для каждой декады месяца (1-10, 11-20, 21-28(31))

Итоговая таблица

id- id

month - месяц от 1 до 12

dec - декада 1,2 или 3

t - число от -255 до 255, 1 знак после запятой - среднее поля t тех экспериментов, гдe ex - 0

t4 - число от -255 до 255, 1 знак после запятой - среднее поля t тех экспериментов, гдe ex - 1

p - целое число от 0 до 1000 - усреднённое значение поля p

o - дробное число от 0 до 1, 2 знака после запятой - усреднённое значение поля o

e - дробное число между 0 и 1, усреднять считая 0 - нулём, а остальные значения единицей

y - дробное число от -255 до 255, 6 знаков после запятой - среднее поля y

x - дробное число от -255 до 255, 6 знаков после запятой - среднее поля x

place_id - id эксперимента - ID сохраняется

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

Дополнительно нужно сделать декаду: месяц 0, декада 0 - туда усреднять данные с 26.12 по 5.01

После того как данные будут усреднены нужно использовать вторую таблицу с иерархией объектов экспериментов. Всего в базе ровно три уровня вложенности. Все данные привязаны к самому глубокому уровню. Требуется усреднить уже усреднённые данные по тем же правилам (за исключение правила про поле e) для всех экспериментов для которых один и тот же parent_id и записать результаты с полей place_id = этому parent_id. Затем повторить тоже самое для этих усреднённых данных и сделать усреднения для самого верхнего уровня.

База большая, каждый запрос может выполняться несколько секунд. Ограничений на время работы скриптов почти нет, лимита памяти тоже почти нет. Но нужно предусмотреть возможность возобновления работы с места остановки. Может быть стоит вести лог, последовательно перебирая ID из второй таблицы.

10 лет назад
ffstudiospb
Федор 
41 годРоссия
11 лет в сервисе
Был
8 месяцев назад