Как выбрать последнее значение 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д