Даты не являются скалярами и не должны рассматриваться как таковые.Я советую использовать соответствующие инструменты для арифметики дат.
Многие люди предлагают использовать математическую дату в формате unix timestamp:
$a = '2012-02-12 14:03:50';
$b = '2012-05-30 00:55:03';
$days = (strtotime($b) - strtotime($a))/86400;
Тем не менее, переход на летнее время и все виды факторов могутсделать этот тип математики неправильным.
Мой подход состоит в том, чтобы обычно использовать DateTime:
$a = new DateTime('2012-02-12 14:03:50');
$b = new DateTime('2012-05-30 00:55:03');
$diff = $b->diff($a);
//$diff is now a DateInterval
Однако, чтобы ответить на ваш реальный вопрос, я бы не стал извлекать данные из MySQL на основе даты MySQLматематику, а точнее я бы просто дал ей даты.
WHERE d >= '2012-02-27' AND d <= '2012-03-29';
Хотя, исходя из ваших требований, вам, возможно, придется изменить 27 на 26, чтобы захватить предыдущий день и выполнить вычисления с ним.
Что касается внесения изменений в значения точек, я бы либо рассчитал и сохранил их, либо просто вычислил бы их в PHP.Нет простого способа сказать SQL: «эй, бери каждую запись между этими датами, и пока ты находишься на ней, сделай некоторую математику с предыдущей записью каждой записи».
Надеюсь, это было понятно, но у меня естьЧувствую, что это граничит с бессвязным, кроме ясности, поэтому, если это так, пожалуйста, дайте мне знать, и я отредактирую свой ответ.