Sql server 使用sqlserver实现FIFO
我正在寻找FIFO的SQL server实现。对于一家大公司的客户,我有两个数据集,其中一个数据集中有积分,另一个数据集中每年有积分兑换和到期 目标是确定在任何给定年份获得的积分中兑换和过期的积分。因此,很明显,兑换和过期的积分必须以先进先出的方式分配给已赢得的积分 数据集如下所示: 获得的积分:Sql server 使用sqlserver实现FIFO,sql-server,fifo,Sql Server,Fifo,我正在寻找FIFO的SQL server实现。对于一家大公司的客户,我有两个数据集,其中一个数据集中有积分,另一个数据集中每年有积分兑换和到期 目标是确定在任何给定年份获得的积分中兑换和过期的积分。因此,很明显,兑换和过期的积分必须以先进先出的方式分配给已赢得的积分 数据集如下所示: 获得的积分: ID year earn 1 2000 100 1 2001 150 1 2002 75 1 2003 10 1 2004 120 燃烧点:
ID year earn
1 2000 100
1 2001 150
1 2002 75
1 2003 10
1 2004 120
燃烧点:
ID Year Type points
1 2001 burn 50
1 2001 exp 20
1 2003 burn 120
1 2004 exp 100
1 2006 exp 20
结合这两个数据集,我们应该得到如下数据集:
组合数据集:
ID Year Earn Burn exp
1 2000 100 80 20
1 2001 150 90 60
1 2002 75 0 60
1 2003 10 0 0
1 2004 120 0 0
简单地说,烧毁的和过期的积分将被分配给以先进先出的方式获得的积分。数据集太大,无法在excel中导出。在SQL server上执行上述操作的代码将大有帮助我找到了答案。我当然没有最有效的代码,但我有下面的算法,使用FIFO逻辑分配过期的积分
算法运行得很好。我本可以在编码方面做得更好。我花了3个小时在一个拥有1.5亿条记录的数据集上运行如果您已经拥有的表中的烧掉和过期的分数已经过独立验证(即,您不能烧掉比您拥有的分数更多的分数等),并且每年都会过期,那么您可以简单地将所有赚取的分数相加,然后减去烧掉和过期的分数。这将为您提供当前拥有的分数,您可以为此发出刻录请求。您可以添加WHERE year