Агрегация SQL и кумулятивное суммирование

У меня есть таблица пользователей, которая выглядит примерно так

Агрегация SQL и кумулятивное суммирование

Есть много пользователей с уникальными идентификаторами, таблица сначала упорядочивается по пользователям, а затем по дате и времени. Каждый экземпляр - это либо тренировка, либо тестовая сессия, у тестовых сессий есть дополнительные аргументы, самое главное - оценка.

Я хотел бы объединить строки этой таблицы, чтобы суммировать время всех сеансов обучения перед сеансом тестирования и возвращать только один экземпляр с совокупным временем обучения и оценкой теста. Каждый дополнительный тест перед новой тренировкой - это просто повторение с новым результатом теста. Это совокупное суммирование времени продолжается до тех пор, пока не появится новый пользователь (идентификатор пользователя), когда он будет сброшен.

Итоговая таблица будет выглядеть примерно так

Агрегация SQL и кумулятивное суммирование

Есть ли команда SQL, которая может этого добиться? (самостоятельное присоединение)?
Запрос не требует чрезмерной оптимизации, приветствуются простые решения.

Пожалуйста, не размещайте изображение. Прочитайте это. stackoverflow.com/help/how-to-ask

Eric 31.07.2018 20:53

Вы что-нибудь пробовали ??

Eric 31.07.2018 20:54

Это вне моих познаний в SQL.

user2974951 31.07.2018 21:02
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Назначьте группу, используя совокупную сумму test. Затем объедините, чтобы получить нужные сводки в каждой группе:

select grp, user_id, sum(time), max(case when task = 'test' then time end) as test_time, max(score)
from (select t.*,
             sum(case when task = 'test' then 1 else 0 end) over (partition by user_id order by datetime) as grp
      from t
     ) t
group by grp, user_id;

Я не совсем понимаю, что делает этот код, но попробую.

user2974951 31.07.2018 21:13

Другие вопросы по теме