Итак, у нас есть таблица транзакций, и я пытаюсь добавить последний статус к транзакциям, но я в тупике о том, как иметь дело с несколькими изменениями состояния в течение дня. Вот пример счетамаркировка статуса для транзакций
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
В основном это должно быть отсортирован по дате сделки (по возрастанию), затем время (по возрастанию), то последовательность (по убыванию) - Я уже это сделал.
Я пытаюсь создать новый столбец CurrentStatus, который будет основываться на столбцах OldStatus/NewStatus. Если это произойдет до того, как произойдет изменение статуса (строка, где New/Old не равна -1), она использует первый OldStatus. После первого изменения статуса все строки, следующие за ним (включая себя), должны быть в статусе изменения NewStatus. В этом случае строки 2-4 должны быть 82, а строка 6-8 должна быть 3058. (Эти данные сокращены, так как в день может быть 50+ транзакций, поэтому она должна работать не более чем на 2 строки после a изменение статуса)
«если нет значений, отличных от -1»? уродливый и запутанный двойной отрицательный. Вы имеете в виду «если есть только -1 значений»? ;) –
как вы получаете данные? по одной строке за раз? или пакет строк, как со значениями данных, которые вы показываете в своем примере? Я считаю, что трюк здесь в том, как вы сделали бы INSERT. –
К сожалению, данные уже находятся в таблице. он приходит как ночная партия. Я просто делаю отчетность по данным. было бы замечательно иметь код, который исправляет его, когда он приходит. – xenapan