Логика здесь может быть сформулирована так, что вы хотите отобразить запись, если либо:
- Это самая первая запись в таблице, либо
- Запись, непосредственно предшествующаяу него было другое значение даты
Мы можем попробовать следующий запрос:
SELECT id, date, data
FROM table1 t1
WHERE t1.date <> (SELECT t2.date FROM table1 t2
WHERE t2.id < t1.id ORDER BY t2.id DESC LIMIT 1) OR
t1.id = (SELECT MIN(id) FROM table1)
ORDER BY t1.id;

Демо
Редактировать:
Приведенное выше решение является одним из вариантов, если вы используете MySQL 5.7 или более раннюю версию.Если у вас есть доступ к MySQL 8+, в частности к функции LAG
, то есть несколько более чистый способ сделать это:
WITH cte AS (
SELECT id, date, data,
LAG(date, 1) OVER (ORDER BY id) date_prev
FROM table1
)
SELECT id, date, data
FROM cte
WHERE date <> date_prev OR date_prev IS NULL
ORDER BY id;
Это использует ту же логику, но использует LAG
чтобы избежать беспорядочных и многословных подзапросов.