Вы можете фильтровать с помощью коррелированного подзапроса, например, так:
select u.*, s.*
from users u
inner join subscriptions s on u.id = s.userId
where s.currentPeriodEnd = (
select max(s1.currentPeriodEnd)
from subscriptions s1
where s1.userId = u.id and s1.currentPeriodEnd > 1565827199
)
order by u.lastName
Для производительности рассмотрите индекс для subscriptions(userId, currentPeriodEnd)
.
В качестве альтернативы, если вы работаете MySQL 8.0 , вы можете использовать row_number()
:
select *
from (
select
u.*,
s.*,
row_number() over(partition by u.id order by s.currentPeriodEnd desc)
from users u
inner join subscriptions s on u.id = s.userId
where s.currentPeriodEnd > 1565827199
) t
where rn = 1
order by lastName