Последние 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.