• is this close?

    --code based on ChrisM fine work at http://www.sqlservercentral.com/Forums/Topic1731617-391-1.aspx

    CREATE TABLE #t1

    (TransactionID INT,

    Customer INT,

    TransactionType VARCHAR(10),

    [Date] DATE,

    Amount MONEY,

    CreditID INT

    );

    INSERT INTO #t1 VALUES(1, 1, 'Credit', '1/1/16', -20, 1);

    INSERT INTO #t1 VALUES(2, 1, 'Debit', '1/2/16', 20, NULL);

    INSERT INTO #t1 VALUES(3, 1, 'Credit', '1/3/16', -100, 2);

    INSERT INTO #t1 VALUES(4, 1, 'Debit', '1/4/16', 50, NULL);

    INSERT INTO #t1 VALUES(5, 1, 'Debit', '1/5/16', 50, NULL);

    INSERT INTO #t1 VALUES(6, 1, 'Credit', '1/6/16', -50, 3);

    INSERT INTO #t1 VALUES(7, 1, 'Debit', '1/7/16', 20, NULL);

    INSERT INTO #t1 VALUES(8, 1, 'Credit', '1/8/16', -50, 4);

    INSERT INTO #t1 VALUES(9, 1, 'Debit', '1/9/16', 20, NULL);

    WITH

    Debits AS (

    SELECT debitdate = date,

    DebitID = TransactionID,

    DebitAmount = Amount,

    [from] = ISNULL(LAG([to], 1) OVER(ORDER BY TransactionID), 0),

    [to]

    FROM

    (

    SELECT *,

    [to] = SUM(Amount) OVER(ORDER BY TransactionID)

    FROM #T1

    WHERE TransactionType = 'Debit'

    ) d

    )

    ,

    Credits as (

    SELECT CreditId,

    PaymentID = TransactionID,

    CreditAmount = -Amount,

    [from] = ISNULL(LAG([to], 1) OVER(ORDER BY TransactionID), 0),

    [to]

    FROM

    (

    SELECT *,

    [to] = SUM(-Amount) OVER(ORDER BY TransactionID)

    FROM #T1

    WHERE TransactionType = 'Credit'

    ) c

    )

    , Results as (

    SELECT c.CreditId,

    debitdate,

    Balance = CASE

    WHEN c.[to] > d.[to]

    THEN c.[to] - d.[to]

    WHEN d.[to] IS NULL

    THEN c.CreditAmount

    ELSE 0

    END,

    ROW_NUMBER() OVER(PARTITION BY c.CreditId ORDER BY DebitId DESC) rn

    FROM Debits d

    FULL OUTER JOIN Credits c ON c.[from] < d.[to] AND c.[to] > d.[from]

    )

    SELECT CreditId,

    Balance AS remaining_balnce,

    debitdate AS last_redeemed_date

    FROM results

    WHERE rn = 1

    ORDER BY creditid;

    DROP TABLE #t1

    ________________________________________________________________
    you can lead a user to data....but you cannot make them think
    and remember....every day is a school day