MS SQL Server中的递归函数比较值
我有一个有三列的表。一个是MemberID,另一列是他们获得的分数,另一列是他们获得分数的日期 我想创建一个结果集,该结果集将向我显示所有超时提高分数的成员的列表 所以我认为对于这个问题,递归表就是答案。但我不知道如何创造它 以下是我的列和一些值的列表:MS SQL Server中的递归函数比较值,sql,sql-server,recursion,Sql,Sql Server,Recursion,我有一个有三列的表。一个是MemberID,另一列是他们获得的分数,另一列是他们获得分数的日期 我想创建一个结果集,该结果集将向我显示所有超时提高分数的成员的列表 所以我认为对于这个问题,递归表就是答案。但我不知道如何创造它 以下是我的列和一些值的列表: MemberID Score Dates 1 3 12/31/2019 1 2 01/31/2020 1 1 02/31/2020
MemberID Score Dates
1 3 12/31/2019
1 2 01/31/2020
1 1 02/31/2020
2 4 12/31/2019
2 6 01/31/2020
2 10 02/31/2020
3 4 12/31/2019
3 6 01/31/2020
3 5 02/31/2020
在本例中,我的结果集仅包括:
MemberID 2,因为它是唯一一个随时间而改进的成员。使用LEAD()
窗口函数:
select MemberID
from (
select MemberID, lead(score) over (partition by MemberID order by Dates) - score dif
from tablename
) t
group by MemberID
having min(dif) > 0
您可以使用分析函数而不是递归来解决此问题 如果您正在查找成员的最新分数是否高于其最早的分数,则应采用以下方法:
Select Distinct MemberID From (
Select MemberID,
First_Value(Score) Over (Partition by MemberID Order By Dates) First_Score,
Last_Value(Score) Over (Partition by MemberID Order by Dates) Last_Score
From Scores
) Where Last_Score > First_Score;
你对“随着时间的推移提高分数”的定义是什么?它必须从第一次约会到最后一次约会才增加吗?在您的示例中,成员3的最终分数高于其初始分数。您使用的是什么DBMS(Oracle、MySQL等)?SQL是语言的一个类别,任何答案都需要针对您的特定变体.SQL Server,并且没有关于分数的定义。只要它们更高。那么——你应该在结果集中包含MemberID3吗?2020年2月的5分高于2019年12月的4分。是的,MemberID 3也应包括在内。谢谢你的帮助!