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

Boa tarde,

Você está tentando selecionar um elemento que não contém na tabela, que seria data inicio 01/03/2018, e data final 03/12/2018. Desta forma não irá retornar os registros entre as datas 01/03/2018 - 03/12/2018.

Teria que ser feita uma comparação como:

data_inicio>='01/03/2018' AND data_fim<='03/12/2018'

A data de inicio tem que ser maior ou igual a 01/03/2018, mas tem que ser menor do que 03/12/2018, tendo a condição AND, você estabelece que quer nesta faixa de datas.

1 curtida

obrigado , só que tem pegar o maior valor de aluguel e agora ?

Tenta especificar da onde você quer selecionar nome e max(valor), por exemplo se o nome é da tabela locatario, ficaria:

SELECT a.nome FROM locatario a;

1 curtida

e amigo ?

oi fiz o que você falou , não alterou em nada

Acredito que precise fazer dois select ai um para retornar os dados e outro dento do where, onde você vai pedir apenas o max data

1 curtida

Eu fiz algumas alterações de teste, tenta tirar o GROUP BY

Não testei, mas seria algo tipo isso:

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

Usando GROUP BY vc está pegando o maior valor de aluguel por locatario, se vc quer o maior entre todos os locatarios, precisa retirar o GROUP BY pegou?

1 curtida

Cara, posta o sql vai, imagens só com o erro, se a gente precisar alterar a query pra te ajudar fica dificil digitarmos do começo… data inicio e data fim são de qual tabela?

E não faça produto cartesiano, use join:

SELECT l.nome, MAX(al.valor) FROM locatario l
INNER JOIN aluguel al ON l.idLocatario = al.idLocatario 
AND al.data_inicio >= '01/03/2018' AND al.data_fim <= '03/12/2018';

CREATE TABLE Locatorio (
idlocatorio INTEGER NOT NULL,
nome VARCHAR(80) NOT NULL,
cpf VARCHAR(14) NOT NULL,
rg VARCHAR(14) NOT NULL,
sexo VARCHAR(1) NOT NULL,
datanascimento VARCHAR(10) NOT NULL,
PRIMARY KEY (idlocatorio)
);

CREATE TABLE Endereco (
idendereco INTEGER NOT NULL,
tipo_logradour VARCHAR(20) NOT NULL,
logradouro VARCHAR(80) NOT NULL,
numero_ VARCHAR(8) NOT NULL,
cep VARCHAR(15) NOT NULL,
bairro VARCHAR(80) NOT NULL,
cidade VARCHAR(50) NOT NULL,
estado VARCHAR(30) NOT NULL,
idlocatorio INTEGER NOT NULL,
PRIMARY KEY (idendereco),
FOREIGN KEY(idlocatorio) References Locatorio(idlocatorio)
);

CREATE TABLE Contato_ (
idcontato INTEGER NOT NULL,
tipo_contato VARCHAR(20) NOT NULL,
valor_contato VARCHAR(150) NOT NULL,
idlocatorio INTEGER NOT NULL,
PRIMARY KEY (idcontato),
FOREIGN KEY(idlocatorio) References Locatorio(idlocatorio)
);

CREATE TABLE Aluguel (
idaluguel INTEGER NOT NULL,
data_inicio VARCHAR(10) NOT NULL,
data_fim VARCHAR(10) NOT NULL,
km_inicio INTEGER NOT NULL,
km_fim INTEGER NOT NULL,
valor DOUBLE PRECISION NOT NULL,
idlocatorio INTEGER NOT NULL,
PRIMARY KEY (idaluguel),
FOREIGN KEY(idlocatorio) References Locatorio(idlocatorio)
);

CREATE TABLE Grupo (
idgrupo INTEGER NOT NULL,
descricao_grupo VARCHAR(30) NOT NULL,
PRIMARY KEY (idgrupo)
);

CREATE TABLE Carro(
idcarro INTEGER NOT NULL,
nome VARCHAR(30) NOT NULL,
modelo VARCHAR(30) NOT NULL,
marca VARCHAR(30) NOT NULL,
ano INTEGER NOT NULL,
placa VARCHAR(10) NOT NULL,
quilometragem INTEGER NOT NULL,
idgrupo INTEGER NOT NULL,
PRIMARY KEY (idcarro),
FOREIGN KEY(idgrupo) REFERENCES Grupo(idgrupo)
);

CREATE TABLE Aluguel_Carro (
idaluguel INTEGER NOT NULL,
idcarro INTEGER NOT NULL,
PRIMARY KEY (idaluguel, idcarro),
FOREIGN KEY(idaluguel) REFERENCES Aluguel(idaluguel)
,
FOREIGN KEY(idcarro) REFERENCES Carro(idcarro)
);

Jovem eu só te fiz a pergunta, não precisava postar sua base inteira! mas enfim, ajustei a query no post anterior, veja se atende… e pesquise sobre plano cartesiano em base, evite e de preferencia ao join

1 curtida

oi obrigado pela ajuda, mas o exercício é para fazer sem join , eu cheguei nisso daqui .

se é sem join então nem produto cartesiano vc deveria usar (ele é um join forçado o que é pior ainda)… o exercicio deixa usa subquery?

1 curtida

sim

Lá em cima eu postei uma sql que possa ser que ajude.

1 curtida

eu fiz isso , mas ele só me da o valor máximo e não o nome da pessoa, falta filtrar o nome .