Группировка по аналогичной фильтрации строк

StackOverflow https://stackoverflow.com/questions/607410

  •  03-07-2019
  •  | 
  •  

Вопрос

Допустим, у меня есть таблица с описанием автомобилей с маркой, моделью, годом и некоторыми другими столбцами.

Исходя из этого, я хотел бы получить по одному полному ряду каждой марки и модели за последний год.

Или, говоря по-другому.Каждая строка будет содержать уникальную комбинацию марки и модели с другими данными из соответствующей строки с наибольшим значением года.

Стандартное решение SQL было бы здорово.

Это было полезно?

Решение

select t1.make, t1.model, t1.year, t1.other_cols
from table t1
where year = (select max(year) from table t2
              where t2.make = t1.make
              and t2.model = t1.model
             );

Другие советы

Решение MySQL:

SELECT * FROM cars GROUP NY CONCAT(make, "-", model) ORDER BY year DESC;

Это должно работать практически везде:

SELECT c1.* 
FROM cars c1
INNER JOIN 
  (
     SELECT Make, Model, Max(Year) AS Year
     FROM cars
     GROUP BY Make, Model
  ) c2 ON c1.Make=c2.Make AND c1.Model=c2.Model, c1.Year=c2.Year

Основное предостережение заключается в том, что Year часто является зарезервированным словом (именем функции), а способы экранирования зарезервированных слов различаются в зависимости от платформы.Чтобы это исправить, переименуйте столбец года во что-то вроде ModelYear.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top