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


Назначьте группу, используя совокупную сумму 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;
Я не совсем понимаю, что делает этот код, но попробую.
Пожалуйста, не размещайте изображение. Прочитайте это. stackoverflow.com/help/how-to-ask