因此,我們有一個交易表,我試圖將最近的狀態添加到交易中,但我很難理解如何在一天內處理多個狀態更改。下面是一個例子帳戶交易的狀態標籤
CREATE TABLE Status
([account] bigint, [TransactionDate] datetime, [TransactionTime] int, [Code] varchar(3), [TransactionSequence] int, [OldStatus] int, [NewStatus] int, [TransactionAmount] money);
INSERT INTO Status
([account], [TransactionDate], [TransactionTime], [Code], [TransactionSequence], [OldStatus], [NewStatus], [TransactionAmount])
VALUES
(8246, '2015-11-02 00:00:00', 6615, 'RT', 3, -1, -1, -808.21),
(8246, '2015-11-02 00:00:00', 6615, 'ITD', 2, 00047, 00082, NULL),
(8246, '2015-11-02 00:00:00', 6615, 'PT', 1, -1, -1, 808.21),
(8246, '2015-11-02 00:00:00', 6616, 'RT', 3, -1, -1, -808.21),
(8246, '2015-11-02 00:00:00', 6616, 'ITR', 2, 00047, 03058, NULL),
(8246, '2015-11-02 00:00:00', 6616, 'PT', 1, -1, -1, 808.21),
(8246, '2015-11-05 00:00:00', 9600, 'E56', 2, -1, -1, '-121.94');
這裏是數據應該如何看
account TransactionDate TransactionTime Code TransactionSequence CurrentStatus TransactionAmount
8246 2015-11-02 6615 RT 3 00047 -808.21
8246 2015-11-02 6615 ITD 2 00082 NULL
8246 2015-11-02 6615 PT 1 00082 808.21
8246 2015-11-02 6616 RT 3 00082 -808.21
8246 2015-11-02 6616 ITR 2 03058 NULL
8246 2015-11-02 6616 PT 1 03058 808.21
8246 2015-11-05 9600 E56 2 03058 -121.94
基本上它需要通過交易日期(ASC),然後時間(ASC),然後順序進行排序(降序) - 我已經做到了。
我很努力地創建新的CurrentStatus列,該列將基於OldStatus/NewStatus列。如果在狀態變化行發生之前(New/Old不是-1的行),它使用第一個OldStatus。第一次狀態改變發生後,它後面的所有行(包括它本身)應該是狀態改變的NewStatus。在這種情況下,第2-4行應該是82,而第6-8行應該是3058.(這個數據縮寫爲一天內可能有多達50多筆交易,所以它必須在超過2行後工作狀態變化)
「如果沒有非-1值」?醜陋和令人困惑的雙重否定。你的意思是「如果只有-1值」? ;) –
你如何收到數據?一次一行?或一批行與您在示例中顯示的數據值一樣?我相信這裏的訣竅在於你如何進行INSERT。 –
不幸的是,數據已經在表中。它作爲一個過夜批次進來。我只是在做數據報告。如果你看看這個例子,我真的想用最新的狀態替換所有的-1,這將是可愛的,有代碼糾正它,因爲它來。 – xenapan