Realmente achei. Muito obrigado.
Mas estou com dois problemas:
1) da forma como estou fazendo, está dando o seguinte erro:
Erro SQL (1111): Invalid use of group function
O select com erro está assim:
select codigo,cotacao,max(dtcotacao) as data from tabela where compvenda<>0 and max(dtcotacao)<'2016-12-30' group by codigo order by max(dtcotacao)
Tem várias informações na internet sobre esse erro, mas não vi nada que tivesse a ver com o meu caso.
Percebi que, tirando o "max(dtcotacao)<'2016-12-30'", funciona. Só que não vi nenhum erro nessa expressão, já que dtcotacao é um campo da tabela do tipo DATE.
2) tirando o "max(dtcotacao)<'2016-12-30'", como disse, o select funciona, mas tem um erro: ele lista na ordem do max(dtcotacao) considerando apenas os códigos com compvenda diferente de zero. Sei que eu mesmo coloquei o "where compvenda<>0", mas a intenção seria listar apenas os que tem compvenda diferente zero, mas na ordem do max(dtcotacao) igual a zero.
Sei que ficou confuso, vou tentar explicar melhor com exemplos:
Imagine que a tabela tenha os seguintes dados:
CODIGO DTCOTACAO COTACAO COMPVENDA
ABCD1 2016-01-01 1,00 0
EFGH2 2016-02-01 0,50 0
ABCD1 2016-05-01 2,00 0
EFGH2 2016-06-20 5,00 0
ABCD1 2016-07-22 3,00 0
ABCD1 2016-08-31 1,50 100
ABCD1 2016-12-10 2,50 0
Da forma como eu fiz o select, ele está retornando o max(dtcotacao) de ABCD1 em 2016-08-31, mas eu gostaria que retornasse em 2016-12-10.
Talvez me perguntem: mas então para que o "where compvenda<>0"? Resposta simples: para não incluir na lista o EFGH2, que não tem nenhum compvenda diferente de zero. Me entende?
Pode me ajudar?