SQL聚合和累积求和
我有一个用户表,看起来像这样 有许多具有唯一id的用户,表首先按用户排序,然后按日期时间排序。每个实例都是一个培训或测试会话,测试会话有额外的参数,最重要的是分数 我希望汇总此表的行,以便将测试会话之前所有培训会话的时间相加,并且只返回一个实例,其中包含累积培训时间和测试分数。在新的培训课程之前,每一次额外的测试都只是一个具有新测试分数的重复实例。此累计时间总和将持续到新用户(用户id)重置时 生成的表将如下所示 是否有SQL命令可以实现这一点?(自连接)?SQL聚合和累积求和,sql,sql-server-2017,Sql,Sql Server 2017,我有一个用户表,看起来像这样 有许多具有唯一id的用户,表首先按用户排序,然后按日期时间排序。每个实例都是一个培训或测试会话,测试会话有额外的参数,最重要的是分数 我希望汇总此表的行,以便将测试会话之前所有培训会话的时间相加,并且只返回一个实例,其中包含累积培训时间和测试分数。在新的培训课程之前,每一次额外的测试都只是一个具有新测试分数的重复实例。此累计时间总和将持续到新用户(用户id)重置时 生成的表将如下所示 是否有SQL命令可以实现这一点?(自连接)? 查询不必过度优化,简单的解决方案
查询不必过度优化,简单的解决方案是受欢迎的。使用
测试的累积和分配一个组。然后进行汇总,以获得每个组中您想要的摘要:
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;
请不要张贴图片。读这个。您尝试过什么吗?这超出了我对SQL的了解。我不完全理解这段代码的作用,但我会尝试一下。