Nahh - can't be done directly. Since you imply there will be multiple id's in the table, then it follows that it is not the primary key. If you want to get one row where there are many, you need to invent an artificial filter. I've done this before (but I'm not proud of it)
select min(rowid)
from hr_emppay
group by id
[Note that you don't need to select the actual ID here for the group by to work. Please read on...]
Now you'll only get one row per unique id from the select, although it has been arbitrarily chosen. You may select the min of the primary key if you want to be politically correct, but that could be tricky if there are multiple fields.
If you then use this select as a sub-query you may get your result:
select id, calc_end, calc_beg
from hr_emppay
where rowid in (select min(rowid)
from hr_emppay
group by id)
order by id, calc_end desc
However, wanting to do this is possibly defective. I'm chosing one id through the very arbitrary rule of min(rowid). Perhaps the way you are going to use this might make it better to do something like
select PRIMARY_KEY_FIELD, id, min(calc_end) ......
or at least use min(calc_end) or max(calc_end) or something more intelligent than rowid?
The need for this query suggests to me (with complete ignorance of your data and application) that the table is not normalised properly. If (ID, calc_end, calc_begin) are not fully dependent on "the key, the whole key and nothing but the key" then it sounds like this one table should be at least two tables. When the tables get into the proper form, then your queries will magically simplify and you won't need to execute really ugly selects like the one I've just suggested.