Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
Sql server 使用sqlserver实现FIFO_Sql Server_Fifo - Fatal编程技术网

Sql server 使用sqlserver实现FIFO

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 燃烧点:

我正在寻找FIFO的SQL server实现。对于一家大公司的客户,我有两个数据集,其中一个数据集中有积分,另一个数据集中每年有积分兑换和到期

目标是确定在任何给定年份获得的积分中兑换和过期的积分。因此,很明显,兑换和过期的积分必须以先进先出的方式分配给已赢得的积分

数据集如下所示:

获得的积分:

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逻辑分配过期的积分

  • 计算个人将使用的最大点数。这将包括兑换和过期的积分。目标是将这些点分配给不同的收益交易
  • 计算出超过使用的最大点数的收益交易。低于此值的任何交易都不应在赎回或过期项下分配任何积分。因此,将所有这些交易的赎回和到期金额设为0。现在,我们只需要为剩下的其他事务分配点
  • 对于每笔收入交易,从已使用的表格中计算出交易,该表格跨越了该交易中获得的积分。现在,对于该收益交易,需要分配的总到期点数是在已用表中的相应交易之前到期的点数+已用表中该交易剩余的点数,具体取决于该交易是赎回交易还是过期交易。同样,兑换的积分也需要分配

  • 算法运行得很好。我本可以在编码方面做得更好。我花了3个小时在一个拥有1.5亿条记录的数据集上运行

    如果您已经拥有的表中的烧掉和过期的分数已经过独立验证(即,您不能烧掉比您拥有的分数更多的分数等),并且每年都会过期,那么您可以简单地将所有赚取的分数相加,然后减去烧掉和过期的分数。这将为您提供当前拥有的分数,您可以为此发出刻录请求。您可以添加WHERE year