Sql 对数据库表中的事务重新排序
我在Teradata数据库中有一些数据,需要对其事务序列重新排序,以便事务显示如下: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
+------+---------+-----+----+-----+
|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,从而结转后续日的正确结转余额。