Используя приведенные ниже таблицы в качестве примера и перечисленный запрос в качестве базового запроса, я хочу добавить способ выбора только строк с максимальным идентификатором!Без необходимости делать второй запрос!
TABLE VEHICLES
id vehicleName
----- --------
1 cool car
2 cool car
3 cool bus
4 cool bus
5 cool bus
6 car
7 truck
8 motorcycle
9 scooter
10 scooter
11 bus
TABLE VEHICLE NAMES
nameId vehicleName
------ -------
1 cool car
2 cool bus
3 car
4 truck
5 motorcycle
6 scooter
7 bus
TABLE VEHICLE ATTRIBUTES
nameId attribute
------ ---------
1 FAST
1 SMALL
1 SHINY
2 BIG
2 SLOW
3 EXPENSIVE
4 SHINY
5 FAST
5 SMALL
6 SHINY
6 SMALL
7 SMALL
И базовый запрос:
select a.*
from vehicle a
join vehicle_names b using(vehicleName)
join vehicle_attribs c using(nameId)
where c.attribute in('SMALL', 'SHINY')
and a.vehicleName like '%coo%'
group
by a.id
having count(distinct c.attribute) = 2;
Итак, я хочу добиться, чтобы выбрать строки с определенными атрибутами, которые соответствуют имени, нотолько одна запись для каждого имени, которое совпадает с тем, где идентификатор является самым высоким!
Таким образом, рабочее решение в этом примере вернет следующие строки:
id vehicleName
----- --------
2 cool car
10 scooter
, если оно использует какой-то видmax для идентификатора
на данный момент я получаю все записи для крутых автомобилей и скутеров.
Моя база данных реального мира имеет аналогичную структуру и содержит 10 тысяч записей, поэтому запроскак выше, может легко вернуть 3000+ результатов.Я ограничиваю результаты до 100 строк, чтобы сократить время выполнения, так как результаты используются при поиске на моем сайте.Причина, по которой у меня есть повторения «транспортных средств» с тем же именем, но только с другим идентификатором, заключается в том, что новые модели постоянно добавляются, но я оставляю старые для тех, кто хочет их откопать!Но при поиске по названию автомобиля я не хочу возвращать старые карты, только самые новые карты с самым высоким ID!
Правильный ответ адаптирует запрос, который я предоставил выше, что яв настоящее время используется и возвращает только те строки, где имя совпадает, но имеет самый высокий идентификатор!
Если это невозможно, предложения о том, как мне добиться того, чего я хочу, без значительного увеличения времени выполнения поиска, будутбыть оцененным!