Я бы попытался создать дополнительную таблицу для вашей основной, чтобы, по крайней мере, действовать как ограничивающая основа запроса. Заполните таблицу чем-то вроде ... (и, очевидно, поместите indexe по основанию даты)
create table DailyStartKey as
SELECT
DATE( FROM_UNIXTIME( YourTimeStampColumn ) ) AS DateBasis,
min( YourAutoIncColumn ) as FirstPKForDay
from
YourTable
group by
1
Затем вы можете запросить эту таблицу, чтобы получить минимальное значение PK (и, возможно, максимальное, если ищите диапазон дат) в вашем запросе. Чтобы сохранить его без необходимости перестраивать его, я бы добавил триггер к вашей основной таблице, чтобы попытаться вставить его в эту таблицу DailyStartKey, если дата еще НЕ была вставлена.
Такой запрос может быть использован ...
select
YourTable.*
from
( select FirstPKForDay
from DailyStartKey
where DateBasis = "2011-02-12" ) StartDate,
( select FirstPKForDay
from DailyStartKey
where DateBasis = "2011-02-25" ) LastDate,
YourTable
where
YourTable.YourAutoIncColumn >= StartDate.FirstPKForDay
and YourTable.YourAutoIncColumn <= LastDate.FirstPKForDay
РЕДАКТИРОВАТЬ, чтобы уточнить другую реализацию TRIGGER.
Чтобы избежать необходимости продолжать запросы к таблице «DailyStartKey», вы можете создать другую таблицу, которая всегда будет содержать только одну запись с последним днем, для которого была создана запись. (или день / час в зависимости от желаемой степени детализации).
Затем в вашем триггере, чтобы узнать, нужна ли новая запись, просто
Select * from LastDateEntryTable where LastDate = CurrentDate
Если он уже найден, игнорируйте .. в противном случае триггер должен выполнить вставку в таблицу ежедневных ключей и обновить «LastDateEntryTable».