Если b.tstamp
уникален в пределах b.tid
, возьмите решение OMG Ponies.
В противном случае вы можете попробовать это решение. Он сортирует весь результат по b.tstamp DESC
и добавляет рейтинг за author_id
. Внешний выбор занимает только строку с rank = 1
, то есть с наибольшим tstamp
на author_id
.
SELECT id, tstamp, label_id, author_id
FROM (SELECT id,
tstamp,
label_id,
author_id,
CASE
WHEN @author_id != author_id THEN @row_num := 1
ELSE @row_num := @row_num + 1
END AS rank,
@author_id := b.author_id
FROM a,
b,
(SELECT @row_num := 0, @author_id := NULL) y
WHERE a.id = b.tid
AND (status = '2' OR status = '3')
AND category != 6
AND (b.type = 'C' OR b.type = 'R')
AND a.tstamp1 BETWEEN {$timestamp_start} AND {$timestamp_end}
ORDER BY b.author_id, b.tstamp DESC
) x
WHERE x.rank = 1
LIMIT 500
Я не пробовал, поэтому, пожалуйста, прокомментируйте, если он не работает.