Как, скажем, приводить к метке времени Unix, затем выбирать запись только в том случае, если дата делится на некоторое число?
Проблема с этим, и большинство подходов заключается в том, что вам все равно нужно прочитать все последовательные точки (если у вас нет индексированных столбцов, содержащих различные представления временной метки), поэтому вы можете уменьшить размер набора результатов, но не уменьшать объем работ, необходимых для его извлечения.
Можете ли вы создать новую таблицу (необязательно находиться в той же базе данных / сервере - вы все еще можете подключаться к необработанным данным с помощью механизма объединения)? Таким образом, вы могли бы создать таблицу временных меток с разной степенью детализации в башнях Ханоя, например,
date time level
------------- -----
201101010000 0
201101010010 6
201101010020 6
201101010030 5
201101010040 6
201101010050 6
201101010100 4
201101010110 6
201101010120 6
201101010130 5
...
201101020000 3
...
Таким образом, вы можете ВЫБРАТЬ из этой сказки на соответствующем уровне детализации и присоединиться к базовым необработанным данным.
Вышеуказанный аргумент может быть использован как функция для агрегирования данных - но без возможности поиска из вам все равно нужно прочитать все промежуточные строки в данных src.
Если бы существовало решение, которое позволило бы мне напрямую выбирать четные интервалы времени
Что-то вроде ....
SELECT DATE_FORMAT(yourdate, SUBSTR('%Y%m%d%H%i%s',0,2*@level)) as t,
AVG(value)
FROM yourtable
WHERE yourdate BETWEEN @datestart AND @dateend
GROUP BY DATE_FORMAT(yourdate, SUBSTR('%Y%m%d%H%i%s',0,2*@level))
ORDER BY 1;
(как указано выше - без присоединения второй таблицы или другого способа выбора только повторной выборки данных с использованием индекса, при использовании агрегата fn нет снижения производительности).