Группировка

Aectann

Новичок
Группировка

Добрый день!

Вот столкнулся с такой проблемой: есть 2 таблицы (клиенты и статусы). При изменении статуса клиента в таблицу статусы добовляется новая запись (старые записи остаются, чтобы можно было просмотреть историю изменений). Так вот нужно сделать выбор из этих таблиц, чтоб результат был в таком формате:

1. клиент <=> последний введённый статус
2. клиент <=> последний введённый статус
3. клиент <=> последний введённый статус

Основная сложность - вытащить именно последний статус для нескольких клиентов

Для одного клиента сделать просто (ORDER BY add_date DESC LIMIT 1), a вот когда присутствует больше одного клиента ( например когда условие WHERE id_person in (1,2,3) ), то LIMIT 1 уже не годится.

При это GROUP BY ... группирует по первой введённой записи, а как добратся до последней введённой не знаю.

Подскажите, если есть мысли хорошие по этому поводу.

Спасибо.
 

Aectann

Новичок
На сколько я понял синтаксис SQL по ссылке - сначала выбираются все записи с максимальной датой (во временную таблицу), а потом делаем выбор только из тех записей, которые попали во временнцю таблицу.

Не понятно вот что:

запрос в примере:
SELECT IDcontract, MAX( date ) AS date
FROM session
GROUP BY IDcontract

и запрос у меня:
SELECT rel_status_id, max( add_date )
FROM person_status
GROUP BY rel_person_id

Мой запрос выдаёт макс. дату, но при этом rel_status_id не соответсвует этой дате, а соответсвует первой записи с данным rel_person_id

вообщем такая белиберда, что я уже совсем запутался!


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

zerkms

TDD infected
Команда форума
Aectann
я тебе дал ссылку о том как это нужно делать. как это сделаешь ты - сугубо твоё дело.
 

Aectann

Новичок
А вы не находите сходства между моим кодом и кодом вашего примера в моём предыдущем посте? так вот, такая конструкция - НЕ даёт нужного мне результата.. в том же посте:

--------------------
Мой запрос выдаёт макс. дату, но при этом rel_status_id не соответсвует этой дате, а соответсвует первой записи с данным rel_person_id
---------------------------

Кроме того, приведённый пример - не совсем годится для меня - там происходит выбор по критерию ( where status like "%complete%"), у меня же единственный критерий - это максимальная дата и время.
 

zerkms

TDD infected
Команда форума
для тех кто смотрит в книгу и (извиняюсь) видит фигу:

http://phpclub.ru/talk/showthread.php?postid=599072#post599072 (и следующий пост)

1. выбираешь во временную таблицу максимальные записи для каждого клиента (группировка + max() )
2. объединяешь исохдную и времнную таблицы. условие объединения - равенство ид_клиента и времени (которое есть максимальное)

кушай на здоровье
 

Aectann

Новичок
Гррр!
Вот именно так я себе всё и представляю..
И даже с удовольствием бы реализовал, но - ГРУППИРОВКА + МАХ() - НЕДАЁТ соответсвующего ИД для максимальной даты!

Всё равно спасибо за помощь..
Буду думать ещё..
 
Сверху