Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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
MS SQL Server中的递归函数比较值_Sql_Sql Server_Recursion - Fatal编程技术网

MS SQL Server中的递归函数比较值

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,另一列是他们获得的分数,另一列是他们获得分数的日期

我想创建一个结果集,该结果集将向我显示所有超时提高分数的成员的列表

所以我认为对于这个问题,递归表就是答案。但我不知道如何创造它

以下是我的列和一些值的列表:

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也应包括在内。谢谢你的帮助!