OK, let's work this through. I haven't tested any of this, nor is it properly optimised, but hopefully it will help.
To list the payments in March 2018, assuming we don't care whether successful or not, do a where:
select * from billpayment
where month(billDate) = 3 and year(billDate) = 2018
To include the relevant customer information in the above, do a join:
select * from billpayment
join loans on customerId = clientId
where month(billDate) = 3 and year(billDate) = 2018
To list only customers who also made a payment in another month of 2018, do another join to a derived table:
select * from billpayment b
join loans l on b.customerId = l.clientId
join (select distinct b1.clientId as clientid1 from billpayment b1
where year(b1.billdate) = 2018 and month(b1.billdate) <> 3) c
on b.customerId = c.clientId1
where month(b.billDate) = 3 and year(b.billDate) = 2018
To add a check whether they started their loan in 2018 (assuming by application date), add an and to your where clause:
select * from billpayment b
join loans l on b.customerId = l.clientId
join (select distinct b1.clientId as clientid1 from billpayment b1
where year(b1.billdate) = 2018 and month(b1.billdate) <> 3) c
on b.customerId = c.clientId1
where month(b.billDate) = 3 and year(b.billDate) = 2018
and year(l.applicationDate) = 2018