Можете да използвате функцията ROW_NUMBER() тук:
SELECT *
FROM (SELECT lp.ID, lp.LoanID, lp.PaymentDate
, ROW_NUMBER() OVER (PARTITION BY YEAR(PaymentDate), Month(PaymentDate) ORDER BY PaymentDate DESC) 'RowRank'
FROM LoanPayments lp
)sub
WHERE RowRank = 1
Това е само най-скорошната дата на плащане за всеки месец, ако искате да я използвате по LoanID, бихте добавили LoanID към PARTITION BY
списък. Ако се интересувате от запазване на връзките, можете да използвате RANK()
вместо ROW_NUMBER()