It's all good I cracked the joins, just had to repeat the joins twice as such...
WITH Base AS (
SELECT
CSM.[First name]
,PP.[Fname]
,CSM.[Last name]
,PP.[Lname]
,[l].[ProfileId]
, [l].[Date]
, [l].[Paid]
, [rn] = ROW_NUMBER() OVER (PARTITION BY [l].[ProfileId] ORDER BY [l].[Date] DESC)
FROM
[dbo].[Ledger] AS [l]
Inner Join personalprofiles PP
ON
L.ProfileId = PP.ID
Inner Join CurrentStudentMembership As CSM
on
CSM.[First name] = PP.[Fname]
And CSM.[Last name] = PP.[Lname]
Where [l].[Paid] > 0
)
SELECT
CSM.[First name]
,PP.[Fname]
,CSM.[Last name]
,PP.[Lname]
, .[ProfileId]
, .[Date]
, .[Paid]
FROM
[base] AS
Inner Join Ledger L
on .[ProfileId] = L.[ProfileId]
Inner Join personalprofiles PP
ON
L.ProfileId = PP.ID
Inner Join CurrentStudentMembership As CSM
on
CSM.[First name] = PP.[Fname]
And CSM.[Last name] = PP.[Lname]
Where [l].[Paid] > 0
and .[rn] = 1;