Eu gostaria de executar o seguinte:
SELECT person, MAX( (date, priority) ) FROM table GROUP BY person;
Ele retornaria um person
, date
e uma priority
linha para cada valor distinto na person
coluna. Os date
e priority
são escolhidos de forma que o date
valor seja maximizado, e o máximo priority
que ocorre nessa data é escolhido.
Como exemplo, executando a consulta nesta tabela
person | date | priority
---------------------------------
1 | '2014-01-01' | 10
1 | '2014-01-02' | 2
1 | '2014-01-02' | 3
deve resultar em
person | date | priority
---------------------------------
1 | '2014-01-02' | 3
Postgres reclama sobre esta tentativa em particular:
ERROR: function max(record) does not exist
HINT: No function matches the given name and argument types.
You might need to add explicit type casts.
Existe uma maneira que eu posso conseguir isso? Qualquer coisa que funcione com o Postgres será aceitável, mas se uma solução for mais padrão, melhor ainda.
Isso se encaixa nas suas necessidades?
Use uma função de janelamento.
Link do SQL Fiddle para você brincar.
Você está interessado na última data. É nisso que você precisa se concentrar em primeiro lugar:
Agora, para obter a maior prioridade para a combinação de pessoa/data, use uma subconsulta:
Esta é a solução mais genérica que você pode imaginar. No entanto, se você tiver uma das versões mais recentes do postgresql, poderá torná-lo melhor com funções de janela