Сложные выборки по времени в MySQL

416
17 мая 2017, 09:21

Есть таблица в базе, примерно такого вида id, project_id, value, date_updated, то есть таблица хранит значение некоторого параметра для определенного проекта в некоторый момент времени. Обновление таблицы для разных проектов происходит с разными интервалами и может меняться. Появилась задача получения примерного значения параметра для определенного проекта (проектов) на интервале между замерами. Делаю линейную аппроксимацию прямо в запросе, нахожу ближайший замер сверху и ближайший снизу, составляю пропорцию, получаю результат. Примерно так:

SELECT SUM(bc1.value+(bc3.value-bc1.value)*TIME_TO_SEC(TIMEDIFF($datetime,bc1.date_updated))
        /TIME_TO_SEC(TIMEDIFF(bc3.date_updated,bc1.date_updated)))) as aproximate
FROM table_name bc1 
LEFT JOIN table_name bc2 ON bc1.project_id=bc2.project_id
                            AND bc1.date_updated<bc2.date_updated
                            AND bc2.date_updated<$datetime  
JOIN table_name bc3 ON bc1.project_id=bc3.project_id
LEFT JOIN table_name bc4 ON bc3.project_id=bc4.project_id
                            AND bc3.date_updated>bc4.date_updated
                            AND bc4.date_updated>$datetime
WHERE bc2.id IS NULL 
      AND bc4.id IS NULL
      AND bc1.date_updated<=$datetime
      AND bc3.date_updated>$datetime;

Все работает все прекрасно. А вот теперь вопрос, если я хочу посчитать среднее значение параметра в определенный час, за последние 30 (90 дней, год...) дней. но с учетом ранее проведенной аппроксимации. то есть хочу получить среднее значение параметра, скажем в 12 часов дня за последние 30 дней. как это лучше сделать?

READ ALSO
Laravel: left join + order c null

Laravel: left join + order c null

Допустим есть табличка с людьми

299
@ - что это за оператор в php

@ - что это за оператор в php

Подскажите, где в документации можно найти про него информацию

274
C++ web Fraemwork

C++ web Fraemwork

Всатала задача написать веб приложение на С++До этого писал пару приложений на питоне с использование джанго

392
Неатомарные операции С++

Неатомарные операции С++

Какие операции называются неатомарными? Если можно с примером

329