У меня есть таблица обзоров товаров, которая выглядит так:
**ReviewID** **ReviewerID** **ReviewText** **Category** **ItemID** **date_time**
01 1212 good product Mobile 1 23/Apr/2022
02 1233 will buy again fruit 2 24/Apr/2022
03 1245 not recommended Mobile 1 25/Apr/2022
04 1236 not ripe fruit 2 22/Apr/2022
Я хочу создать представление, которое выбирает ReviewID, ReviewText и новый столбец с именем tReviews, в котором все обзоры одной и той же категории и ItemID объединены и упорядочены по дате и времени.
Представление должно дать такие результаты для приведенной выше таблицы:
**ReviewID** **ReviewText** **tReviews**
01 good product 25/Apr/2022 1 not recommended
23/Apr/2022 1 good product
02 will buy again 24/Apr/2022 2 will buy again
22/Apr/2022 2 not ripe
03 not recomended 25/Apr/2022 1 not recommended
23/Apr/2022 1 good product
04 not ripe 24/Apr/2022 2 will buy again
22/Apr/2022 2 not ripe
В снежинке я бы использовал Listagg для столбца AllReviews, как я могу получить тот же результат для MySQL.
буду признателен за помощь
В MySQL вы можете использовать GROUP_CONCAT
следующим образом:
CREATE VIEW my_view AS
(
SELECT T.ReviewID, T.ReviewText, D.tReviews
FROM table_name T JOIN
(
SELECT Category, ItemID,
GROUP_CONCAT(CONCAT(date_time, ' ', ItemID, ' ', ReviewText) ORDER BY date_time DESC SEPARATOR '\n') tReviews
FROM table_name
GROUP BY Category, ItemID
) D
ON T.Category = D.Category AND
T.ItemID = D.ItemID
)
Смотрите демо.
Вы можете проверить обновленный ответ.
Это работает, я принимаю ответ.
Спасибо, Ахмед, я думаю, что ваш ответ почти готов, но я хотел бы сгруппировать по категории и идентификатору элемента и хотел бы, чтобы самый последний обзор по дате и времени в AllReviews отображался первым (в порядке убывания).