Assuming your database is Postgresql, I propose the SQL query below:
SELECT distinct cs.idclienteunidade 
  from clienteunidadeservico cs
    where cs.anocobranca = 2021 and cs.mescobranca = 4
    and not exists (select * 
                      from clienteunidadeservico cs2 
                     where cs2.idclienteunidade = cs.idclienteunidade
                       and cast( (cast(cs2.anocobranca as varchar) || '-' || lpad(cast(cs2.mescobranca as varchar),2,'0') || '-' || '01') as date) <
                           cast( (cast(cs.anocobranca as varchar) || '-' || lpad(cast(cs.mescobranca as varchar),2,'0') || '-' || '01') as date)
                   )
Some considerations:
- This example was done considering a Postgresql database.
- Logic Used: Select distinct clients from a specific period (year/month) other than exists a record with a period (year/month) prior to the period initially specified, such as anocobranca = 2021andmescobranca = 04
- I preferred to generate a date from the fields anocobrancaandmescobrancausing the functionscastandlpadas follows:
Observe:
cast( (cast(cs.anocobranca as varchar) || '-' || lpad(cast(cs.mescobranca as varchar),2,'0') || '-' || '01') as date)
I observed that your field mescobranca is whole, so I used the function lpad to fill with a zero left if necessary, since I want to generate the dates according to your example 2017-05-01 and 2021-04-01 to make the comparison between the two dates.
Considering the sample data below:
| idclienteunidadeservico | anocobrancanca | same | clientele | 
| 1 | 2021 | 4 | 251 | 
| 2 | 2021 | 4 | 548 | 
| 3 | 2020 | 5 | 251 | 
| 4 | 2021 | 5 | 548 | 
 
When executing the proposed consultation as a solution, the result was:
As demonstrated, I believe that the proposed consultation will solve the problem.
Observing:
Postgresql would even do the cast correctly without lpad, but I preferred to use to illustrate how to do if the database system requires the two characters for the month. The query select cast('2021-4-15' as date) results 2021-04-15.