Группировка по одинаковой фильтрации строк - PullRequest
1 голос
/ 03 марта 2009

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

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

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

Было бы неплохо стандартное решение SQL.

Ответы [ 3 ]

1 голос
/ 03 марта 2009
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
             );
1 голос
/ 03 марта 2009

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

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

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

1 голос
/ 03 марта 2009

Решение MySQL:

SELECT * FROM cars GROUP NY CONCAT(make, "-", model) ORDER BY year DESC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...