Вот и моя проблема. У меня есть таблица транзакций, где мы храним все транзакции для всех учетных записей (огромные таблицы-153M строк). Отрицательная транзакция может компенсировать положительную транзакцию, если их код смещения совпадает.
Проблема состоит в том, что один отрицательный транс может компенсировать только самый старый положительный транс с тем же кодом смещения. Единственный способ, о котором я могу думать, - это l oop через все отрицательные транзакции и начать вставлять соответствующие положительные в временную таблицу. Затем присоедините временную таблицу в l oop, чтобы избежать дублирования.
Я не думаю, что было бы хорошей идеей запустить al oop в такой большой таблице, но я не могу придумать какой-либо другой элегантный способ достичь того, чего я хочу.
Это сложно объяснить, поэтому ниже приведена упрощенная таблица.
DROP TABLE IF EXISTS #TBL
CREATE TABLE #TBL
(TranID TinyInt, TranDT Date, OffsetCode CHAR(1), NegTran Bit)
INSERT #TBL VALUES
(1,'4/1/2020','A',0)
,(2,'4/2/2020','A',0)
,(3,'4/3/2020','A',0)
,(4,'4/4/2020','B',0)
,(5,'4/5/2020','B',0)
,(6,'4/6/2020','B',0)
,(7,'4/7/2020','B',1)
,(8,'4/8/2020','B',1)
,(9,'4/9/2020','A',1)
,(10,'4/10/2020','A',1)
В конце концов, то, что я хочу увидеть, находится ниже
TranID TranDT OffsetCode NegTran TranID TranDT OffsetCode NegTran
7 2020-04-07 B 1 4 2020-04-04 B 0
8 2020-04-08 B 1 5 2020-04-05 B 0
9 2020-04-09 A 1 1 2020-04-01 A 0
10 2020-04-10 A 1 2 2020-04-02 A 0
Может кто-нибудь пожалуйста помочь мне с этим?