我被困在有类似[]这样的数据的情况下>
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 ...] >
您可以使用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