Du kan använda funktionen ROW_NUMBER() här:
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
Det är bara det senaste betalningsdatumet för varje månad, om du ville ha det med LoanID skulle du lägga till LoanID i PARTITION BY
lista. Om du var intresserad av att bevara band kan du använda RANK()
istället för ROW_NUMBER()