Создать сгруппированный запрос - получить последние 4 записи по дате из каждой категории
Получить последние 4 записи по дате из каждой категория(с каждой категории по 4 записи).
Есть оконные функции, но по примерам их использования не могу разобраться.
Мой пример:
SELECT `news_related`.`category_id`, `category`.`title`, `category`.`alias`, `category`.`textcolor`, `news`.`heading`, `news`.`alias`, `news`.`image`, `news`.`excert_content`, `news`.`main_content`, `news`.`published_date`
FROM `news`
INNER JOIN `news_related` ON `news_related`.`news_id` = `news`.`id`
JOIN `category` ON `category`.`id` = `news_related`.`category_id`
WHERE `news_related`.`category_id` IN (1,2,5,7)
ORDER BY `news`.`published_date` DESC
Ответы (1 шт):
Автор решения: pegoopik
→ Ссылка
Нумерация + фильтр. Я подправил алиасы и убрал кавычки, непонимаю, как в такой стилистике вообще писать запросы можно...
SELECT category_id, title, alias, textcolor, heading, alias, image, excert_content, main_content, published_date,
FROM(
SELECT NR.category_id, C.title, C.alias, C.textcolor, N.heading, N.alias, N.image, N.excert_content, N.main_content, N.published_date,
--нумеруем каждую категорию в порядке published_date DESC
ROW_NUMBER() OVER(PARTITION BY NR.category_id ORDER BY N.published_date DESC)Last_published_order
FROM news N
INNER JOIN news_related NR ON NR.news_id = N.id
INNER JOIN category C ON C.id = NR.category_id
)T
WHERE Last_published_order <= 4 --берём по 4 последних записей в каждой категории