Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 使用FIFO订购一组具有多个级别的事务?_Sql Server_Recursion_Common Table Expression_Fifo - Fatal编程技术网

Sql server 使用FIFO订购一组具有多个级别的事务?

Sql server 使用FIFO订购一组具有多个级别的事务?,sql-server,recursion,common-table-expression,fifo,Sql Server,Recursion,Common Table Expression,Fifo,我有一组需要使用FIFO订购的具有多个级别的事务。我也没有典型的父子记录集。交易编号不按顺序排列,但每笔交易都有一个“other Transaction#”,将其与账户之间转移的任何交易关联起来 转账是指单位在同一基金的账户之间的移动 转换是指同一账户上的基金之间的单位转换 按照级别顺序,我的交易记录如下: 我要查找的结果应该具有相同的结果集,但为事务的“顺序”增加了一列。订单需要使用基于FIFO的方式,其中第一笔交易是1号交易,订单将遵循适当的传输和切换 订单所需的挑战遵循传输,并在移动到

我有一组需要使用FIFO订购的具有多个级别的事务。我也没有典型的父子记录集。交易编号不按顺序排列,但每笔交易都有一个“other Transaction#”,将其与账户之间转移的任何交易关联起来

  • 转账是指单位在同一基金的账户之间的移动
  • 转换是指同一账户上的基金之间的单位转换
按照级别顺序,我的交易记录如下:

我要查找的结果应该具有相同的结果集,但为事务的“顺序”增加了一列。订单需要使用基于FIFO的方式,其中第一笔交易是1号交易,订单将遵循适当的传输和切换

订单所需的挑战遵循传输,并在移动到同一级别的下一个事务之前向下切换整个层次结构

样本记录集

CREATE TABLE #data (
  [Level] INT NOT NULL,
  FundId INT NOT NULL,
  AccountId INT NOT NULL,
  TransId VARCHAR(20) NOT NULL PRIMARY KEY CLUSTERED,
  OtherTransId VARCHAR(20) NULL,
  TransType VARCHAR(20) NOT NULL,
  TransDate DATE NOT NULL,
  AgeDays INT NULL,
  Units INT NOT NULL
 );

INSERT #data VALUES 
(1,200,5000,'00000015','00000035','Switch In','2019-01-01',NULL,500),
(2,200,5000,'00000035','00000015','Switch Out','2019-01-01',NULL,500),
(2,200,5000,'00000070',NULL,'Buy','2018-09-09',452,700),
(2,200,5000,'00000046',NULL,'Sell','2018-09-12',449,200),
(1,100,5000,'00000001',NULL,'Buy','2019-06-30',159,100),
(1,100,5000,'00000002',NULL,'Sell','2019-07-15',NULL,20),
(1,100,5000,'00000003',NULL,'Buy','2019-07-31',128,50),
(1,100,5000,'00000004','00000011','Transfer Out','2019-08-15',NULL,45),
(2,100,6000,'00000005','00000020','Transfer In','2019-08-17',NULL,200),
(2,100,6000,'00000020','00000005','Transfer Out','2019-08-17',NULL,200),
(2,100,6000,'00000044',NULL,'Buy','2019-06-11',177,70),
(2,100,6000,'00000050','00000088','Transfer In','2019-06-10',NULL,130),
(3,100,7000,'00000088','00000050','Transfer Out','2019-06-10',NULL,130),
(3,100,7000,'00000079',NULL,'Buy','2019-06-01',187,130);

+-------+--------+-----------+---------------+---------------------+------------------+-----------------+------------+-------+
| Level | Fund # | Account # | Transaction # | Other Transaction # | Transaction Type |      Date       | Age (Days) | Units |
+-------+--------+-----------+---------------+---------------------+------------------+-----------------+------------+-------+
|     1 |    200 |      5000 |      00000015 |            00000035 | Switch In        | January 1, 2019 |            |   500 |
|     2 |    200 |      5000 |      00000035 |            00000015 | Switch Out       | January 1, 2019 |            |   500 |
|     2 |    200 |      5000 |      00000070 |                     | Buy              | Sept 9, 2018    |        452 |   700 |
|     2 |    200 |      5000 |      00000046 |                     | Sell             | Sept 12, 2018   |        449 |   200 |
|     1 |    100 |      5000 |      00000001 |                     | Buy              | June 30, 2019   |        159 |   100 |
|     1 |    100 |      5000 |      00000002 |                     | Sell             | July 15, 2019   |            |    20 |
|     1 |    100 |      5000 |      00000003 |                     | Buy              | July 31, 2019   |        128 |    50 |
|     1 |    100 |      5000 |      00000004 |            00000011 | Transfer Out     | August 15, 2019 |            |    45 |
|     2 |    100 |      6000 |      00000005 |            00000020 | Transfer In      | August 17, 2019 |            |   200 |
|     2 |    100 |      6000 |      00000020 |            00000005 | Transfer Out     | August 17, 2019 |            |   200 |
|     2 |    100 |      6000 |      00000044 |                     | Buy              | June 11, 2019   |        177 |    70 |
|     2 |    100 |      6000 |      00000050 |            00000088 | Transfer In      | June 10, 2019   |            |   130 |
|     3 |    100 |      7000 |      00000088 |            00000050 | Transfer Out     | June 10, 2019   |            |   130 |
|     3 |    100 |      7000 |      00000079 |                     | Buy              | June 1, 2019    |        187 |   130 |
+-------+--------+-----------+---------------+---------------------+------------------+-----------------+------------+-------+
所需输出:(添加订单列)


沃伦克:看起来你有一个真正的问题,但很难理解你在问什么。挑战是如何逻辑地排除分区和顺序。我们必须找到包含传输或切换的第一级最早事务,然后在移动到下一个第一级事务之前对后续子事务进行排序。
+-------+-------+--------+-----------+---------------+---------------------+------------------+-----------------+------------+-------+
| Order | Level | Fund # | Account # | Transaction # | Other Transaction # | Transaction Type |      Date       | Age (Days) | Units |
+-------+-------+--------+-----------+---------------+---------------------+------------------+-----------------+------------+-------+
|     1 |     1 |    200 |      5000 |      00000015 |            00000035 | Switch In        | January 1, 2019 |            |   500 |
|     2 |     2 |    200 |      5000 |      00000035 |            00000015 | Switch Out       | January 1, 2019 |            |   500 |
|     3 |     2 |    200 |      5000 |      00000070 |                     | Buy              | Sept 9, 2018    |        452 |   700 |
|     4 |     2 |    200 |      5000 |      00000046 |                     | Sell             | Sept 12, 2018   |        449 |   200 |
|     5 |     1 |    100 |      5000 |      00000001 |                     | Buy              | June 30, 2019   |        159 |   100 |
|     6 |     1 |    100 |      5000 |      00000002 |                     | Sell             | July 15, 2019   |            |    20 |
|     7 |     1 |    100 |      5000 |      00000003 |                     | Buy              | July 31, 2019   |        128 |    50 |
|     8 |     1 |    100 |      5000 |      00000004 |            00000011 | Transfer Out     | August 15, 2019 |            |    45 |
|     9 |     2 |    100 |      6000 |      00000005 |            00000020 | Transfer In      | August 17, 2019 |            |   200 |
|    10 |     2 |    100 |      6000 |      00000020 |            00000005 | Transfer Out     | August 17, 2019 |            |   200 |
|    11 |     2 |    100 |      6000 |      00000044 |                     | Buy              | June 11, 2019   |        177 |    70 |
|    12 |     2 |    100 |      6000 |      00000050 |            00000088 | Transfer In      | June 10, 2019   |            |   130 |
|    13 |     3 |    100 |      7000 |      00000088 |            00000050 | Transfer Out     | June 10, 2019   |            |   130 |
|    14 |     3 |    100 |      7000 |      00000079 |                     | Buy              | June 1, 2019    |        187 |   130 |
+-------+-------+--------+-----------+---------------+---------------------+------------------+-----------------+------------+-------+