Что я ищу, чтобы сделать это ...Получение большинства последних записей в группах
У меня есть база данных, которая регистрирует изменения в статусе записи ...
Например, он может быть установлен как «неактивные», а затем, в более поздней строке может активировать запись ...
1 Company1 Active
2 Company2 Active
3 Company1 Inactive
4 Company1 Active
запрос нужно искать активных в данный момент результаты ... и должны вернуть две записи ... (один для company1 и один для Company2.)
Мне нужно вернуть только те записи, которые в настоящее время активны.
Этот запрос делает его часть ...
SELECT id, gid, status
FROM companies
GROUP BY gid
HAVING status = 'Active'
ORDER BY id
Но он не ищут возвращаемые результаты на основе последней записи ...
То, что я в основном смотрел на то, как чтобы включить в каждую группу только самую последнюю запись, такую как «LIMIT 1,1» с «ORDER BY id DESC» ... Я понятия не имею, как включить ее в запрос.
Обновление Я добрался до так далеко ... На основании ответа, но это вернуть последнюю строку каждой группы, является ли она в настоящее время активна или нет ...
select t.*
from (
select status, max(id) as id
from companies
group by gid
having status = 'Active'
) active_companies
inner join companies t on active_companies.id = t.id
Я не вижу столбец в вашей таблице, который строго указывает порядок между вашими статусами, а не 'id', но это ненадежно. У вас есть столбец со значением «дата изменения статуса»? –
Я уверен, что 'id' будет адекватен потребностям OP – Strawberry