Isto não ajuda?
select l.nome, l.valor from locatorio l, aluguel al where l.idLocatorio = al.idLocatorio and data_inicio >= '01/03/2018'
and data_fim <= '03/12/2018' and l.valor = (select max(valor) from locatorio lo, aluguel alu where lo.idLocatorio = alu.idLocatorio and data_inicio >= '01/03/2018'
and data_fim <= '03/12/2018')
1 curtida
Veja se resolve:
SELECT l.nome FROM locatario l, (
SELECT idLocatario, MAX(valor) FROM aluguel
WHERE data_inicio >= '01/03/2018' AND data_fim <= '03/12/2018'
) t WHERE l.idLocatario = t.idLocatario;
Então não tem jeito vai ter que usar group by, ai vc limita em 1 no final
SELECT l.nome, MAX(al.valor) FROM locatario l, aluguel al
WHERE l.idLocatario = al.idLocatario
AND al.data_inicio >= '01/03/2018' AND al.data_fim <= '03/12/2018'
GROUP BY l.nome ORDER BY MAX(al.valor) DESC LIMIT 1;
Obs: não tenho certeza se no postgres o MAX(al.valor) vai funcionar no ORDER BY mas não deixa de ser uma tentativa… boa sorte!
1 curtida
Só não entendi por que tive que usar o order by ai .
pra garantir o max do max entre os nomes agrupados, mesmo limitando 1, sem ele pode acontecer isso:
nome | valor
a | 123
b | 999
Nesse exemplo, limitando 1 o a será exibido e isso é errado, pq b é maior ainda,quando se usa o order desc vc inverte a ordem:
nome | valor
b | 999
a | 123
E limitando 1, o b será exibido, pegou? Macetes que só no dia a dia (leia-se necessidade) se aprende, sucesso nos estudos e pergunte ao professor sobre o cartesiano, vamos ver se ele vai saber responder ja que ele não deixou usar join, mas vc acabou usando mesmo assim…
1 curtida
Pode me ajudar em outro ?