Я нашел этот запрос для рассчитать медианы
@myvar:=0;
@rownum:=0;
SELECT result.readdate,
AVG(total_gallons) AS total_gallons
FROM (SELECT middle_rows.readdate,
numerated_rows.rownum,
numerated_rows.total_gallons
FROM (SELECT IF(@myvar = readdate, @rownum := @rownum + 1, @rownum := 0) AS rownum,
@myvar := readdate AS readdate_alias,
total_gallons
FROM _temp_total_gallons
ORDER BY readdate,
total_gallons) numerated_rows,
(SELECT readdate,
COUNT(*) / 2 median
FROM _temp_total_gallons
GROUP BY readdate) middle_rows
WHERE numerated_rows.rownum BETWEEN ( middle_rows.median - IF(median = ROUND(median), 1, 0) - 0.5 ) AND ( middle_rows.median - IF(median = ROUND(median), 0, 0.5) )
AND numerated_rows.readdate_alias = middle_rows.readdate) result
GROUP BY readdate
Как вы видите, он использует @myvar
и @rownum
в качестве переменных сеанса SELECT IF(@myvar = readdate, @rownum := @rownum + 1, @rownum := 0)
Проблема в том, что не удается запустить это внутри хранимой процедуры, потому что синтаксис @myvar:=0
неизвестен, и я должен указать / установить время выполнения внутри выбора.
Как бы вы переписали приведенный выше запрос для использования в хранимой процедуре?
Пример данных для тестирования и запрос можно найти по адресу https://gist.github.com/948250
Второй набор данных для тестирования здесь https://gist.github.com/25b991396d0dd6968b7e