SQL聚合和累积求和

时间:2018-07-31 18:50:23

标签: sql sql-server-2017

我有一个用户表,看起来像这样

enter image description here

有许多具有唯一ID的用户,该表首先由用户排序,然后按日期时间排序。每个实例都是培训或测试会话,测试会话具有其他参数,最重要的是得分。

我想汇总此表的行,以便对所有训练课程的时间进行总计,然后仅返回一个实例以及累积的训练时间和测试分数。在新的培训课程之前进行的每项其他测试只是具有新测试分数的重复实例。累计时间总和一直持续到重置新用户(用户ID)为止。

结果表如下所示

enter image description here

是否存在可以实现此目的的SQL命令? (自我加入)?
该查询不必过分优化,欢迎使用简单的解决方案。

1 个答案:

答案 0 :(得分:0)

使用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;