Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL聚合和累积求和_Sql_Sql Server 2017 - Fatal编程技术网

SQL聚合和累积求和

SQL聚合和累积求和,sql,sql-server-2017,Sql,Sql Server 2017,我有一个用户表,看起来像这样 有许多具有唯一id的用户,表首先按用户排序,然后按日期时间排序。每个实例都是一个培训或测试会话,测试会话有额外的参数,最重要的是分数 我希望汇总此表的行,以便将测试会话之前所有培训会话的时间相加,并且只返回一个实例,其中包含累积培训时间和测试分数。在新的培训课程之前,每一次额外的测试都只是一个具有新测试分数的重复实例。此累计时间总和将持续到新用户(用户id)重置时 生成的表将如下所示 是否有SQL命令可以实现这一点?(自连接)? 查询不必过度优化,简单的解决方案

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

有许多具有唯一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的了解。我不完全理解这段代码的作用,但我会尝试一下。