使用日期时间查找最后一个数据(状态)

问题描述 投票:0回答:1

我被困在有类似[]这样的数据的情况下>

studentId Marks marksgotOn
1         10    2019-12-01
1         10    2019-12-01
2         35    2019-12-02
3         35    2019-12-02
4         90    2019-12-03

我需要找到学生何时获得最后marksGotOn

SELECT StudentId, CASE WHEN Marks BETWEEN 0 AND 10 THEN 'Fail'
  WHEN Marks BETWEEN 30 AND 35 THEN 'Pass' 
  WHEN Marks >=90 THEN 'Excellent' ELSE '' END AS ResultStatus
FROM Student

但是我需要找到学生何时更改其lastResultStatus时间。

我被困在其中有像StudentId Marks MarksgotOn这样的数据的情况下1 10 2019-12-01 1 10 2019-12-01 2 35 2019-12-02 3 35 2019-12-02 4 ...] >

sql-server tsql
1个回答
0
投票

您可以使用LAG从上一行中获取值并与当前行进行比较。我们正在使用PARTITION将结果按学生分组,并按marksGotOn排序。

WITH DataSource AS
(
    SELECT StudentId
         ,CASE WHEN Marks BETWEEN 0 AND 10 THEN 'Fail'WHEN Marks BETWEEN 30 AND 35 THEN 'Pass' WHEN Marks >=90 THEN 'Excellent' ELSE '' END AS ResultStatus
         ,marksGotOn 
    FROM Student
)
SELECT *
      ,IIF(LAG(ResultStatus) OVER(PARTITION BY StudentId ORDER BY marksGotOn) <> ResultStatus, 'Changed', 'Not Changed')
FROM DataSource
ORDER BY StudentId
        ,marksGotOn
© www.soinside.com 2019 - 2024. All rights reserved.