Должно работать следующим образом:
SELECT *
FROM items
JOIN (
SELECT max(item_id) AS item_id
FROM items
WHERE item_section = 'sp_500'
GROUP BY source
ORDER BY 1 DESC
LIMIT 3
) i USING (item_id)
Почему?
1) Фильтровать по item_section = 'sp_500'
2) Свернуть несколько элементов с одинаковым source
вGROUP BY
, потому что:
не имеет дубликатов в столбце источника
Я беру самое большое item_id
за source
- кажется наиболее вероятным, и выне уточнил.
3) ORDER BY item_id DESC
, чтобы получить лучшие из них и LIMIT 3 (без дубликатов к настоящему времени).
4) JOIN
к исходной таблице, чтобы получить всю строку для выбранных item_id
с.