Если вы используете MySQL, нет способа сделать то, что вы хотите, в одном выборе. Вам потребуется внутренний запрос, который выбирает минимальный идентификатор и форматированное или другое поле для каждой отформатированной даты. Затем вы снова присоединяетесь к родительской таблице и выбираете записи с минимальным идентификатором.
В других базах данных (postgresql, oracle, db2) есть оконные функции, которые позволяют сделать это за один выбор (т. Е. DENSE_RANK () OVER ...).
Вот пример с внутренним запросом (о котором вы, возможно, уже знаете):
SELECT B.formattedDay, A.*
FROM someTable A
JOIN
(
SELECT DATE_FORMAT(someDate, '%y-%m-%d') as formattedDay,
MIN(ID) as firstId
FROM someTable I
GROUP BY 1
) B ON (A.ID = B.firstId)
При необходимости измените MIN (ID) на MIN (someDate) и его временную метку. Если с одной и той же отметкой времени может появиться более одной записи, вам потребуется выполнить операцию дважды. Сначала получите минимальную дату в день, затем минимальный идентификатор за минимальную дату.