O que estou fazendo errado , que não sai os valores na tabela ?

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;

deu certo nao

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

funfou cara, obrigado ai

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 ?

Abre outro tópico jovem!

abri ai já amigo .