首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从学生中选择测试的最后一次尝试

从学生中选择测试的最后一次尝试
EN

Stack Overflow用户
提问于 2010-11-09 04:14:40
回答 4查看 129关注 0票数 0

我有一个表,里面有来自学生和考试的信息,每次学生参加考试时,都会在这个表中保存一条记录,所以我希望获得一次考试的学生的最后一次尝试。

代码语言:javascript
复制
| IdStudent | IdTest | Attempt|
-------------------------------
| 1         | 1      | 1      |
-------------------------------
| 2         | 1      | 1      |
-------------------------------
| 1         | 1      | 2      |
-------------------------------
| 2         | 2      | 1      |

假设我选择测试编号1,我想得到的记录是2和3,如果我选择测试2,我想得到的记录是4,依此类推。

我希望问题是清楚的。提前感谢你的帮助。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-09 04:20:16

下面的SQL将为您提供所需的内容:

代码语言:javascript
复制
SELECT IdStudent, IdTest, MAX(Attempt)
FROM StudentTable
WHERE IdTest = @TestNumber
GROUP BY IdStudent, IdTest
票数 2
EN

Stack Overflow用户

发布于 2010-11-09 04:26:07

@Jeff的答案会给你数字,但不会给你行。如果需要行中的其他数据,则必须使用子查询或CTE。如下所示:

代码语言:javascript
复制
WITH JeffAnswer AS
(
  SELECT IdStudent, IdTest, MAX(Attempt) AS MaxAttept
  FROM StudentTable
  WHERE IdTest = @TestNumber
  GROUP BY IdStudent, IdTest
)
SELECT * 
FROM StudentTable S
INNER JOIN JeffAnswer J ON
   S.IdStudent = J.IdStudent AND 
   S.IdTest = J.IdTest AND 
   S.Attempt = J.MaxAttempt
票数 2
EN

Stack Overflow用户

发布于 2010-11-09 04:26:29

杰夫·霍恩比的一些替代方法:

代码语言:javascript
复制
Select ...
From Table As T1
Where Exists    (
                Select 1
                From Table As T2
                Where T2.IdStudent = T1.IdStudent
                    And T2.IdTest =T1.IdTest
                Having Max(T2.Attempt) = T1.Attempt
                )

如果您使用的是SQL Server 2005+:

代码语言:javascript
复制
With RankedTests As
    (
    Select IdStudent, IdTest, Attempt, ...
        , Row_Number() Over ( Partition By IdStudent, IdTest
                                 Order By Attempt Desc ) As Num
    From Table
    )
Select ...
From RankedTests
Where Num = 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4127649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档