У меня есть данные в таблице в следующем формате.SQL Выберите одну строку для каждого типа категории
id | person_id| category | value| updated_date
-----------------------------
1 | p1 |race | r1 | 2015-02-26
2 | p1 |race | r2 | 2015-02-26
3 | p2 |race | r3 | 2015-02-27
4 | p2 | race | r1 | 2015-02-28
5 | p1 | lang | l1 | 2015-02-26
Теперь я фильтрую информацию о личности человека. Мне нужно следующее в наборе результатов.
- Мне нужна запись для каждой категории, которая существует для этого человека.
- Если существует несколько записей для категории, укажите один раз, который обновляется последним.
- Если обновленные даты совпадают, получите первый в списке.
Для p1,
1 | p1 |race | r1 | 2015-02-26
5 | p1 | lang | l1 | 2015-02-26
Определение "первым в списке". SQL действительно не имеет понятия «порядок» как таковой, и полагаться на идентификаторы автогенераторов (если это то, что здесь означает 'id'), это не то, что вы обычно должны делать. Почему вы переключаетесь с самого недавно обновленного на раннее обновление? Или вы имели в виду раннее обновление в любом случае, и вам просто нужно более высокое разрешение на 'updated_date' (возможно, вы должны сделать это отметкой времени)? Это похоже на классическую проблему [tag: наибольшая n-на-группу], не отвечают ли стандартные ответы? –