Wir haben also eine Transaktionstabelle und ich versuche, den letzten Status an Transaktionen anzuhängen, aber ich bin ratlos, wie man mit mehreren Statusänderungen innerhalb eines Tages umgeht. Hier ist ein Beispiel KontoStatusbeschriftung für Transaktionen
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');
Hier ist, wie die Daten aussehen sollten
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
Grundsätzlich muss sie von Transaktionsdatum (auf) sortiert werden, dann Zeit (auf), dann Reihenfolge (absteigend) - Ich habe das schon gemacht.
Ich habe Schwierigkeiten, die neue CurrentStatus-Spalte zu erstellen, die auf den OldStatus/NewStatus-Spalten basieren würde. Wenn es vor einer Statusänderungszeile (eine Zeile, in der Neu/Alt nicht -1 ist) auftritt, verwendet es den ersten OldStatus. Nachdem die erste Statusänderung stattgefunden hat, sollten alle darauf folgenden Zeilen (einschließlich sich selbst) der Status NewStatus der Statusänderung sein. In diesem Fall sollten die Zeilen 2-4 82 sein, und die Zeilen 6-8 sollten 3058 sein. (Diese Daten sind abgekürzt, da es mehr als 50 Transaktionen an einem Tag geben kann, so dass es für mehr als nur 2 Zeilen danach funktionieren muss eine Statusänderung)
"wenn es keine Nicht-1-Werte gibt"? hässlich und verwirrend doppelt negativ. Meinst du "wenn es nur -1 Werte gibt"? ;) –
Wie erhalten Sie die Daten? eine Reihe nach der anderen? oder ein Batch von Zeilen wie bei den Datenwerten, die Sie in Ihrem Beispiel zeigen? Ich glaube, der Trick besteht darin, wie Sie ein INSERT machen würden. –
Leider sind die Daten bereits in der Tabelle. es kommt als eine Nachtcharge herein. Ich berichte nur über die Daten. es wäre schön, Code zu haben, der es korrigiert, wie es hereinkommt. – xenapan