From the attached transaction table, the cardOldValue of each transaction should equal to the CardNewValue of the last transaction.
I want to identify the TransactionID and the CardNumber of some suspicious cards who's CardOldValue is greater than the CardNewValue of the previous transaction.
In the example, the transactionID '003' and cardNumber '1234' should be captured as it's greater than the previous transaction cardNewValue '50'.
Following is what I have so far, but it doesn't give me the data I am after. Apparently I am not quite sure how self-join work:
SELECT
f1.TransactionID, f1.cardNumber, f1.cardOldValue,
f2.cardNewValue, f1.transactionDate, f2.transactionDate
FROM
Transaction f1, Transaction F2
WHERE
f2.transactionDate = (SELECT MAX(transactionDate)
FROM Transaction
WHERE transactionDate < f1.transactionDate
AND cardNumber = f2.cardNumber
AND f1.cardOldValue > f2.cardNewValue)
I tested the sub-query separately, it gives me the date that is just older than the current date. So could you please let me know how to self-join the table properly?