Sql 对数据库表中的事务重新排序

Sql 对数据库表中的事务重新排序,sql,teradata,Sql,Teradata,我在Teradata数据库中有一些数据,需要对其事务序列重新排序,以便事务显示如下: +------+---------+-----+----+-----+ |Tx_Seq|Tx_Date |O/Bal|Qty |C/Bal| +------+---------+-----+----+-----+ |1 |1/08/2012|0 |500 |500 | +------+---------+-----+----+-----+ |1 |2/08/2012|500 |-10

我在Teradata数据库中有一些数据,需要对其事务序列重新排序,以便事务显示如下:

+------+---------+-----+----+-----+
|Tx_Seq|Tx_Date  |O/Bal|Qty |C/Bal|
+------+---------+-----+----+-----+
|1     |1/08/2012|0    |500 |500  |
+------+---------+-----+----+-----+
|1     |2/08/2012|500  |-100|400  |
+------+---------+-----+----+-----+
|1     |3/08/2012|400  |250 |650  |
+------+---------+-----+----+-----+
|2     |3/08/2012|650  |100 |750  |
+------+---------+-----+----+-----+
|3     |3/08/2012|750  |-400|350  |
+------+---------+-----+----+-----+
|4     |3/08/2012|350  |-100|250  |
+------+---------+-----+----+-----+
|1     |4/08/2012|250  |200 |450  |
+------+---------+-----+----+-----+
|1     |5/08/2012|450  |100 |550  |
+------+---------+-----+----+-----+
+------+---------+-----+----+-----+
|Tx_Seq|Tx_Date  |O/Bal|Qty |C/Bal|
+------+---------+-----+----+-----+
|1     |1/08/2012|0    |500 |500  |
+------+---------+-----+----+-----+
|1     |2/08/2012|500  |-100|400  |
+------+---------+-----+----+-----+
|3     |3/08/2012|400  |250 |650  |
+------+---------+-----+----+-----+
|2     |3/08/2012|650  |100 |750  |
+------+---------+-----+----+-----+
|4     |3/08/2012|750  |-400|350  |
+------+---------+-----+----+-----+
|1     |3/08/2012|350  |-100|250  |
+------+---------+-----+----+-----+
|1     |4/08/2012|250  |200 |450  |
+------+---------+-----+----+-----+
|1     |5/08/2012|450  |100 |550  |
+------+---------+-----+----+-----+
目前看起来是这样的:

+------+---------+-----+----+-----+
|Tx_Seq|Tx_Date  |O/Bal|Qty |C/Bal|
+------+---------+-----+----+-----+
|1     |1/08/2012|0    |500 |500  |
+------+---------+-----+----+-----+
|1     |2/08/2012|500  |-100|400  |
+------+---------+-----+----+-----+
|1     |3/08/2012|400  |250 |650  |
+------+---------+-----+----+-----+
|2     |3/08/2012|650  |100 |750  |
+------+---------+-----+----+-----+
|3     |3/08/2012|750  |-400|350  |
+------+---------+-----+----+-----+
|4     |3/08/2012|350  |-100|250  |
+------+---------+-----+----+-----+
|1     |4/08/2012|250  |200 |450  |
+------+---------+-----+----+-----+
|1     |5/08/2012|450  |100 |550  |
+------+---------+-----+----+-----+
+------+---------+-----+----+-----+
|Tx_Seq|Tx_Date  |O/Bal|Qty |C/Bal|
+------+---------+-----+----+-----+
|1     |1/08/2012|0    |500 |500  |
+------+---------+-----+----+-----+
|1     |2/08/2012|500  |-100|400  |
+------+---------+-----+----+-----+
|3     |3/08/2012|400  |250 |650  |
+------+---------+-----+----+-----+
|2     |3/08/2012|650  |100 |750  |
+------+---------+-----+----+-----+
|4     |3/08/2012|750  |-400|350  |
+------+---------+-----+----+-----+
|1     |3/08/2012|350  |-100|250  |
+------+---------+-----+----+-----+
|1     |4/08/2012|250  |200 |450  |
+------+---------+-----+----+-----+
|1     |5/08/2012|450  |100 |550  |
+------+---------+-----+----+-----+

请注意,2012年8月3日o/Bal的tx_seq超出正常订购范围。我尝试过分析函数,例如介于1个前置和1个前置之间的行,作为重新排序的手段,但无法使其工作。有人知道如何做到这一点吗?

同一余额能否在一天内产生多次?如果是这样的话,我看不出你怎么能纯粹根据你所展示的列,以确定性的方式修正Tx_Seq值。Damien同样的obal和cbal可能会出现缺货的情况。表中有1000多万条记录,其序号与当天交易的期初余额不一致。有时同一天可能只有两次交易,有时是数千次。因此,如果2012年8月3日,在三个不同的时间,余额为400,则开始值如您的示例所示,我刚刚补充了两次,这意味着当天有两个交易序列,即400->其他值->其他值->400。根据你所展示的数据,你无法知道这两个序列中哪一个先出现。如果这两个序列共享任何其他公共平衡值,那么可能会有更多的排列。是的。我同意你的看法,我找不到任何排列来使序列号反映o/bal的正确顺序。因此,我向全世界提出了问题。我的后备策略是更新obal和cbal以反映序列号。这应在当日所有交易完成后提供相同的cbal,从而结转后续日的正确结转余额。