#sql #database #select #nosql #time-series
#sql #База данных #выберите #nosql #временные ряды
Вопрос:
Вот моя таблица, в которой описывается, что пользователь купил некоторые товары в какой-то момент.
time, user, item_id
мои данные:
100, u1, i1
150, u2, i2
200, u1, i2
300, u1, i3
450, u2, i5
результат, который я хочу, — это элементы, заказанные каждым пользователем по времени:
u1, [i1, i2, i3]
u2, [i2, i5]
Есть ли SQL-запрос, который может это сделать? Если нет, существует ли какой-либо другой тип базы данных, который подходит для этого требования? Учтите, что объем данных может быть огромным, какое решение может иметь наилучшую производительность?
Спасибо!
Комментарии:
1. Да, базы данных SQL могут выдавать эти результаты. Без указания одного из них ваш вопрос либо слишком широкий, либо вы просите рекомендацию — обе причины закрыть вопрос.
Ответ №1:
Да, есть SQL-запросы, которые могут это сделать, например, в MYSQL, которые вы можете использовать GROUP_CONCAT
, которые удовлетворят ваши требования.
SELECT USER, GROUP_CONCAT(DISTINCT item_id ORDER BY time SEPARATOR ',')
FROM Table
Ответ №2:
Пожалуйста, попробуйте это, если используется SQL SERVER (TSQL).
SELECT [user],
abc =
STUFF((SELECT
',' item_id
FROM @tblName Where A.[user] = [user]
FOR XML PATH('')), 1, 1, ''
)
FROM @tblName A GROUP by [user]