Du kan bruge funktionen ROW_NUMBER() her:
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 er bare den seneste betalingsdato for hver måned, hvis du ville have det med LoanID, ville du tilføje LoanID til PARTITION BY
liste. Hvis du var interesseret i at bevare bånd, kunne du bruge RANK()
i stedet for ROW_NUMBER()