MySQL — Найдите последнюю версию первого дочернего

#mysql #row-number #mysql-5.7

#mysql #номер строки #mysql-5.7

Вопрос:

У меня есть родительский объект, у которого много версий.

 CREATE TABLE version (  id int,  item_id int,  logged_at datetime,  parent_id int );  CREATE TABLE parent (  id int );  INSERT INTO version (id, item_id, logged_at, parent_id) VALUES (1, 1, "2021-12-01 20:00:00", 1); INSERT INTO version (id, item_id, logged_at, parent_id) VALUES (2, 1, "2021-12-01 20:20:00", 1); INSERT INTO version (id, item_id, logged_at, parent_id) VALUES (3, 1, "2021-12-01 21:40:00", 1); INSERT INTO version (id, item_id, logged_at, parent_id) VALUES (4, 2, "2021-12-01 21:40:00", 1); INSERT INTO version (id, item_id, logged_at, parent_id) VALUES (5, 2, "2021-12-01 20:20:00", 1);  INSERT INTO parent (id) VALUES (1);  

Как вы можете видеть, каждый Version принадлежит к разным Items . Где единственное, что их отличает .item_id , — это их принадлежность и .logged_at атрибут.

Моя цель-найти самую низкую .item_id версию с последней .logged_at версией.

Таким образом, желаемый результат в этом примере должен быть :

 VALUES (3, 1, "2021-12-01 21:40:00", 1);  

Я понимаю, что разделы row_number() могут получить первый дочерний элемент, но мне трудно понять, как выполнить вторичный фасетный поиск.

Любая помощь или указания будут высоко оценены. Спасибо!

Ответ №1:

вы можете попробовать это так.

 SELECT *, ROW_NUMBER() OVER (PARTITION BY item_id ORDER BY logged_at DESC) row_num FROM VERSION ORDER BY logged_at DESC, row_num, item_id LIMIT 1  

Сортировка item_id по logged_in времени по PARTITION BY синтаксису.

Затем для предметов с тем же item_id самым ранжированием определяется в соответствии с logged_in .

Из этой таблицы order by logged_in desc является основным, чтобы узнать последнего пользователя, вошедшего в систему, и order by row_num, item_id второстепенным, чтобы выбрать наименьшего item_id из пользователей, вошедших в систему в то же время.

Комментарии:

1. Это потрясающе, Сильверстар. Огромное спасибо. Желаю вам отличных выходных.