Я пытаюсь получить через запрос MySQL последние 2 записи (в хронологическом порядке из нашего столбца dt (дата/время)) каждого идентификатора сервера. Может быть несколько записей с одинаковым идентификатором сервера. Мой код пока есть, но не работает:
select * from table
where server_id = server_id
Order by dt Desc limit 2"
Я также пытался использовать функцию ALL, однако мой MySQL недостаточно обновлен для этого, и в настоящее время я не могу его обновить, так что это не вариант. Я также пробовал:
select * (partition by server_id order by dt desc) from table
limit 2;
То, что я чувствую, ближе всего к решению этой проблемы, это этот код, который я сгенерировал:
select * from monitor_data
group by server_id
Order by dt Desc limit 10
;
Эта проблема с этим кодом выше заключается в том, что теперь он запрашивает только 1 запись для каждого идентификатора вместо 10.
Быстро и грязно - используйте подзапрос, чтобы получить интересующие вас строки, и присоединитесь к нему:
select * from table join (select dt, server_id, count(*) from table
group by dt, server_id
Order by dt Desc limit 2) tops on table.server_id=tops.server_id and table.dt=tops.dt
Производительность не будет высокой, но может быть достаточной для ваших нужд.
Это работает для меня, за исключением того, что это дает мне 2 полных записи, по 1 для каждой группы. Как я могу получить n записей для каждой группы?