Как запросить отношение серий действий, инициированных пользователями из SQL или NoSQL?

#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]