ЭТО НЕ ТАКИЕ ВОПРОС, ЧЕМ: Используя LIMIT в GROUP BY, чтобы получить N результатов для каждой группы?
но я признаю, что это похоже.
Мне нужно выбрать первые 2 строки на человека. строки упорядочены по Полученному Году
Проблема: есть вероятность, что в тот же месяц были введены 2 данных (дата введена в ГГГГ-ММ)
Запрос, с которым я пришел (после упомянутого вопроса), застревает в цикле BIG.
SELECT * FROM `table_data` as b WHERE ( SELECT count(*) FROM `table_data` as a WHERE a.Nom = b.Nom and a.year < b.year ) <= 2;
Пример данных :
A | year | Nom --------------------- b | 2011-01 | Tim --------------------- d | 2011-01 | Tim --------------------- s | 2011-01 | Tim --------------------- a | 2011-03 | Luc --------------------- g | 2011-01 | Luc --------------------- s | 2011-01 | Luc
Если экспорт:
A | year | Nom --------------------- b | 2011-01 | Tim --------------------- d | 2011-01 | Tim --------------------- a | 2011-03 | Luc --------------------- g | 2011-01 | Luc
( - Сначала получите набор результатов, как будто вам нужна только последняя запись для каждого - name - простая GROUP BY из производной таблицы с ORDER BY ВЫБРАТЬ * ИЗ ( ВЫБРАТЬ * FROM `table_data` ORDER BY `year` DESC ) `a` ГРУППА ПО `Nom` ) UNION ( - Затем объедините его с набором результатов, которые вы получите, если примените те же критерии - и дополнительно укажите, что вы не хотите, чтобы ни одна из строк, найденных - первая операция ВЫБРАТЬ * ИЗ ( ВЫБРАТЬ * FROM `table_data` WHERE `id` NOT IN ( SELECT `id` ИЗ ( ВЫБРАТЬ * FROM `table_data` ORDER BY `year` DESC ) `a` ГРУППА ПО `Nom` ) ORDER BY `year` DESC ) `b` ГРУППА ПО `Nom` ) - При желании подать заявку на окончательные результаты ЗАКАЗАТЬ `Nom` DESC,` year` DESC
Я уверен, что есть более короткий способ сделать это, но сейчас я не могу, чтобы жизнь меня определяла, что это такое. Однако это работает , если у вас есть первичный ключ (что вам нужно) и что он называется id
.