@Darsatan

Как выполнить поиск по подгруппе?

Добрый вечер.
Имеется некая таблица, хранящая конфигурации компьютеров (id, inv_number, date, proc, memory, ...). При изменении конфигурации добавляется новая строка, которая гарантированно совпадает с записью о предыдущей версии конфига только полем inv_number (остальное может измениться). Необходимо составить список актуального оборудования (т.е. записи с последними датами)

Знаний по sql не особо много, но есть 2 мысли. Первая - использовать подзапрос
select * 
from pc pc1
where pc1.date = (select max(date) from pc pc2 where pc1.inv_number = pc2.inv_number)

В целом работает, но смущает выполнение подзапроса для каждой записи, что не есть хорошо для производительности. Вторая мысль была связана с группировкой по inv_number, но я имею понятия как потом вывести строки с max(date).
В общем, подскажите как лучше сделать или натолкните на путь истинный.

UPD: Воистину, накосячил с условием в подзапросе... SQL Fiddle
  • Вопрос задан
  • 2186 просмотров
Решения вопроса 1
evnuh
@evnuh
Поиск Гугл помог мне, впусти и ты его в свой дом
Не всегда рабочий вариант:
select * from pc group by inv_number having date=MAX(date)

UPD:
Всегда рабочий вариант:
SELECT g.* from pc g 
INNER JOIN (
SELECT inv_number, MAX(date) as date FROM pc 
GROUP BY inv_number) 
AS s USING (inv_number, date)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@asdz
Желательно бы, сюда кидать примерчик

Может так:?
SELECT * FROM (
          SELECT * FROM pc ORDER BY date ASC
) tmp
GROUP BY inv_number
ORDER BY inv_number
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы