Как выбрать строку с максимальной датой?
В PostgreSQL есть замечательная удобная конструкция distinct on:select distinct on (1) -- выбрать только уникальные значения по первому полю (action) из выборки
action, -- вывести action, usr, datetime
usr,
datetime
from table t1
order by 1, datetime desc -- для выборки отсортировать по первому полю (action), затем по дате в обратном порядке
Попробуйте группировать по  usr и action, а к ним подтянуть максимальные id и дату.
Вообще костыль, может работать не самым лучшим образом. Если такая выборка нужна часто но она меняется реже 10 минут, к примеру, то можно сделать материализованное представление, что позволит тратить время на его перестройку, а выборка будет достаточно быстрой.
P.S. Вот про него я говорил:select 
  max(id) id
, x.usr
, x.action
, max(datetime) datetime
from test x
group by x.usr, x.action
order by id