Последние n записей пока поле parent_id IS NULL достигнет 3 раз - MySQL
Формулировка задачи:
Помогите сделать выборку как на скриншоте
Решение задачи: «Последние n записей пока поле parent_id IS NULL достигнет 3 раз»
textual
Листинг программы
SET @null_num := 0; SELECT * FROM t WHERE created_at > ( SELECT created_at FROM ( SELECT t.created_at, (CASE WHEN parent_id IS NULL THEN @null_num := @null_num + 1 END) AS null_num FROM t ORDER BY created_at DESC ) AS t WHERE null_num = 3 )
Объяснение кода листинга программы
В этом коде:
SET @null_num := 0;
— это подготовительный этап, где в переменнойnull_num
устанавливается начальное значение 0.SELECT * FROM t WHERE created_at > (...)
— это основная часть запроса. Здесь выбираются все строки из таблицыt
, где значение поляcreated_at
больше, чем результат запроса в скобках.(SELECT created_at FROM (...))
— это вложенный запрос, который вычисляет значение для каждой строки таблицыt
, и затем сортирует результаты в порядке убывания.WHERE null_num = 3
— это условие, которое ограничивает результаты только теми строками, где значениеnull_num
равно 3.ORDER BY created_at DESC
— это часть запроса, которая сортирует результаты по дате в обратном порядке.SELECT t.created_at, (CASE WHEN parent_id IS NULL THEN @null_num := @null_num + 1 END) AS null_num
— это часть вложенного запроса, которая подсчитывает количество строк сparent_id
равным NULL и увеличивает значениеnull_num
на 1.FROM t
— это часть запроса, которая указывает, что таблица для выборки — этоt
. Таким образом, этот запрос выбирает последние 3 строки, где полеparent_id
равно NULL.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д