Xpoint
   [напомнить пароль]

Проблемы с группировкой

Метки: [без меток]
2006-03-21 17:43:04 [обр] Superman(0/16)[досье]

В таблице имеется колонка thread и time.
Если пишу SELECT thread, time FROM table GROUP BY thread ORDER BY time DESC
то мне выдается thread, но из этой группы (т.е. группы с одинаковыми значениями thread) выбирается почему-то самое первое сообщение (time самый ранний, т.е. НЕСВЕЖИЙ), мне же нужно чтоб группировка давала последнее сообщение.

Надеюсь я изложил свою мысль ясно

PS: так у меня рисунки и не добавились :(

спустя 10 минут [обр] Денис Ибаев aka Dionys(0/57)[досье]
SELECT thread, MAX(time)...
спустя 10 минут [обр] Superman(0/16)[досье]

Запрос такой:

SELECT m.message, a.name, a.time, a.catid, a.id, a.thread, MAX(a.time) as maxtime
FROM  jos_sb_messages as a LEFT JOIN jos_sb_messages_text m ON a.id = m.mesid, jos_sb_categories as b
WHERE a.catid = b.id and b.published = 1 and a.hold = 0 
GROUP BY a.thread 
ORDER BY a.time DESC

Никаких изменений :(

спустя 9 минут [обр] Superman(0/16)[досье]

Пишу так:

SELECT m.message, a.name, a.time, a.catid, a.id, a.thread, MAX(a.time) as maxtime
FROM  jos_sb_messages as a LEFT JOIN jos_sb_messages_text m ON a.id = m.mesid, jos_sb_categories as b
WHERE a.catid = b.id and b.published = 1 and a.hold = 0 
GROUP BY a.thread 
ORDER BY maxtime DESC

Все равно выдается запись (message), которая соответствует сАмой ранней записи в данной группе (т.е. time наименьшее)

спустя 59 минут [обр] Дмитрий Кучкин(3/236)[досье]

Не уверен, что без ошибок — проверить не на чем

SELECT m.message, a.name, a.time, a.catid, a.id, a.thread, a.time
FROM jos_sb_categories AS b
INNER JOIN jos_sb_messages AS a ON a.catid = b.id
LEFT JOIN jos_sb_messages AS a1 ON a.thread = a1.thread AND a.time < a1.time
LEFT JOIN jos_sb_messages_text m ON a.id = m.mesid
WHERE b.published = 1 AND a.hold = 0 AND a1.time IS NULL
ORDER BY a.time DESC LIMIT 10

Решение, как обычно :), взято отсюда Выборка записей по дате (285172)

спустя 14 часов [обр] Phlinten(0/14)[досье]
Superman[досье]попробуйте сделать ордер не по времени а по айди записи, то есть из группы выбирать наибольшее айди, оно и будет последним
спустя 5 часов [обр] Superman(0/16)[досье]

Спасибо всем!

PS: мне тут задачу несколько упростили, но теперь я хоть знаю как это делается вообще :)

Powered by POEM™ Engine Copyright © 2002-2005