Как выбрать последнее значение i_id по data_id - MySQL

Узнай цену своей работы

Формулировка задачи:

Добрый день! Есть таблица. В ней нужно выбирать все, но только последние значения i_id по data_id.
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)
Можно было написать условие 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)

Решение задачи: «Как выбрать последнее значение 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. Код имеет следующую структуру:

  1. SELECT d.* - выбираем все поля из таблицы dataicraci и сохраняем их в переменную d.
  2. (select i_id, MAX(data_id) max_data_id GROUP BY i_id) - в этом подзапросе мы выбираем i_id и максимальное значение data_id для каждого i_id.
  3. 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.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.2 из 5
Похожие ответы