Тут путает именно то, что дата отображена по убыванию и не понятно как записи вносились в базу. Скорее это какой-то журнал и тут надо поймать изменение status
со следующей датой, хотя сути это не меняет. Автор уже ответил на свой вопрос, а я просто оставлю здесь свой вариант решения:
-- искомая таблица
CREATE TABLE testTable (
date DATETIME NOT NULL,
status int NOT NULL
);
-- данные
INSERT INTO testTable VALUES ('2023-02-26 21:24:01', 0);
INSERT INTO testTable VALUES ('2023-02-26 21:21:01', 0);
INSERT INTO testTable VALUES ('2023-02-26 21:18:02', 0);
INSERT INTO testTable VALUES ('2023-02-26 21:15:02', 0);
INSERT INTO testTable VALUES ('2023-02-26 21:12:02', 1);
INSERT INTO testTable VALUES ('2023-02-26 21:09:01', 1);
INSERT INTO testTable VALUES ('2023-02-26 21:06:02', 0);
INSERT INTO testTable VALUES ('2023-02-26 21:03:01', 0);
INSERT INTO testTable VALUES ('2023-02-26 21:00:02', 0);
INSERT INTO testTable VALUES ('2023-02-26 20:57:01', 0);
INSERT INTO testTable VALUES ('2023-02-26 20:54:01', 0);
INSERT INTO testTable VALUES ('2023-02-26 20:51:01', 0);
INSERT INTO testTable VALUES ('2023-02-26 20:48:01', 1);
INSERT INTO testTable VALUES ('2023-02-26 20:45:02', 0);
INSERT INTO testTable VALUES ('2023-02-26 20:42:01', 0);
INSERT INTO testTable VALUES ('2023-02-26 20:39:01', 0);
-- выборка
SELECT
t.date,
t.status
FROM
(
SELECT
date,
status,
LAG(status) OVER (ORDER BY date DESC) AS nextStatus -- следующий статус
FROM testTable
) t
WHERE
t.status != t.nextStatus -- либо есть разница
OR t.nextStatus IS NULL -- либо последняя
ORDER BY
t.date DESC;