MySQL Запросить самые последние 10 записей для разных идентификаторов

Я пытаюсь получить через запрос 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.

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
0
18
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Быстро и грязно - используйте подзапрос, чтобы получить интересующие вас строки, и присоединитесь к нему:

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 записей для каждой группы?

Asad Nagra 18.05.2022 04:54

Другие вопросы по теме