Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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_Database_Sql Server 2008_Sql Server 2012 - Fatal编程技术网

如何使用SQL创建随时间推移的回顾性趋势

如何使用SQL创建随时间推移的回顾性趋势,sql,sql-server,database,sql-server-2008,sql-server-2012,Sql,Sql Server,Database,Sql Server 2008,Sql Server 2012,我在创建下一个表的回顾趋势时遇到了一些问题,仅使用SQL 用户| id |考试日期|考试名称|结果 ------- +---------+-------+---- 1 | 2013-01-01 6:00 |地理|通行证 1 | 2013-01-02 6:00 |数学|不及格 1 | 2013-01-03 6:00 |地理|失败 1 | 2013-01-04 6:00 |生物学|失败 1 | 2013-01-04 7:00 |生物学|通行证 1 | 2013-01-04 6:00 |数学|不及格

我在创建下一个表的回顾趋势时遇到了一些问题,仅使用SQL

用户| id |考试日期|考试名称|结果 ------- +---------+-------+---- 1 | 2013-01-01 6:00 |地理|通行证 1 | 2013-01-02 6:00 |数学|不及格 1 | 2013-01-03 6:00 |地理|失败 1 | 2013-01-04 6:00 |生物学|失败 1 | 2013-01-04 7:00 |生物学|通行证 1 | 2013-01-04 6:00 |数学|不及格 1 | 2013-01-04 7:00 |数学|通行证 2 | 2013-01-04 7:00 |数学|不及格

我需要获得特定日期范围内每天的通过率。例如,对于某个特定的X天,我需要获取特定学生当天的最新可用结果。如果当前日期没有可用结果,我需要获取前一天的结果。如果前一天的结果为空,我需要获取前一天的结果,依此类推。如果某个学生一天内有多个结果可用,则应在计算中使用最新的结果,忽略较旧的结果。我需要得到每个考试组在特定一天的通过率。生成的表应该如下所示

考试名称| 2013-01-01 | 2013-01-02 | 2013-01-03 | 2013-01-04 ----- +--------+- ------+-------+------ 地理| 100%| 100%| 0%| 0% 数学|零| 0%| 0%| 50% 生物学|零|零|零| 100%

到目前为止,我每天只返回多个表。但我认为可以将其合并为一个表。这是一个查询,用于获取特定日期的最新结果

select ExamName, COUNT(*) as TotalCount,
    sum(case when Result = 'PASS' then 1 else 0 end) PassCount 
    from (SELECT  
         UserID, 
         ExamName,            
         Result,
         DateOfExam,
         ROW_NUMBER() OVER (Partition BY UserID,  ExamName Order By DateOfExam DESC) AS RowNum
         From  dbo.ExamResults       
    where DateOfExam <= '2013-01-04 7:00'    
       ) T1
where T1.RowNum = 1
group by ExamName

SQLFiddle与一些DDL:

您使用的是mysql还是sqlserver?它们不是同一件事。无论是使用DBMS,您都需要使用透视或交叉表,以使其按您希望的方式工作。我使用的是MS SQL Server 2012。我发现了一些使用透视表的查询,但我不确定如何将其适合我的情况,因为对于每个列,我都需要执行特定的计算一些ddl和示例数据如何?sqlfiddle.com是一个很好的起点。我已经在sqlfiddle上创建了所有数据,并添加了一个查询,如何返回特定日期的总计和通过率