Как выбрать последнее значение i_id по data_id - MySQL
Формулировка задачи:
Добрый день! Есть таблица. В ней нужно выбирать все, но только последние значения i_id по data_id.
Т.е. вот эти
Можно было написать условие WHERE i_id !=1, но может быть что нету i_id равный 1 для конкретного data_id. И возможно что есть одна data_id где i_id =1. Может быть и такое, что совпадений для конкретного data_id может быть 3 например (110, 6, 7), (111, 11, 7), (112, 12, 7). В этом случае все равно нужно брать из базы (112, 12, 7)
CREATE TABLE `dataicraci` ( `di_id` int(10) UNSIGNED NOT NULL, `i_id` int(10) UNSIGNED NOT NULL, `data_id` int(10) UNSIGNED NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `dataicraci` (`di_id`, `i_id`, `data_id`) VALUES (59, 6, 6), (62, 1, 5), (63, 5, 5), (64, 1, 4), (65, 4, 4), (66, 1, 3), (67, 3, 3), (68, 1, 12), (69, 3, 12), (70, 1, 2), (71, 3, 2), (96, 1, 11), (97, 2, 11), (102, 1, 1), (103, 2, 1), (106, 1, 8), (107, 6, 8), (110, 6, 7), (111, 11, 7), (112, 12, 7), (113, 1, 9);
(59, 6, 6), (63, 5, 5), (65, 4, 4), (67, 3, 3), (69, 3, 12), (71, 3, 2), (97, 2, 11), (103, 2, 1), (107, 6, 8), (112, 12, 7), (113, 1, 9)
Решение задачи: «Как выбрать последнее значение i_id по data_id»
textual
Листинг программы
SELECT d.* FROM ( select i_id, MAX(data_id) max_data_id GROUP BY i_id ) as m JOIN dataicraci as d ON m.i_id = d.i_id AND m.max_data_id = d.data_id
Объяснение кода листинга программы
В данном коде выполняется запрос к таблице dataicraci
с целью выбрать последнее значение i_id
по data_id
.
Код имеет следующую структуру:
SELECT d.*
- выбираем все поля из таблицыdataicraci
и сохраняем их в переменнуюd
.(select i_id, MAX(data_id) max_data_id GROUP BY i_id)
- в этом подзапросе мы выбираемi_id
и максимальное значениеdata_id
для каждогоi_id
.JOIN dataicraci as d ON m.i_id = d.i_id AND m.max_data_id = d.data_id
- здесь мы объединяем результаты подзапроса (который сохраняем в переменнойm
) с таблицейdataicraci
по полямi_id
иdata_id
. Таким образом, в результате выполнения этого запроса мы получим последнее значениеi_id
для каждого уникальногоdata_id
из таблицыdataicraci
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д