Me ajuda?
Seguinte, Tenho uma tabela no SQL que tem varios registros de varias pessoas por dia e valores distintos.
Preciso fazer select que pegue a DATA_TRASANCAO mais recente e com o WHERE do cód abaixo.
Quando jogo no SQL WHERE até funciona porem ele nao tras a DATA_TRASANCAO mais recente.
No banco de dados o campo DATA_TRASANCAO é = DATETIME.
SELECT MAX(DATA_TRASANCAO) ASDATA_TRASANCAO,N_CARTAO,MOTORISTAFROMcombustivelWHERESALDO_ATUAL< '41' GROUP BYN_CARTAO
tira isso WHERESALDO_ATUAL< ‘41’ e veja se trás a data certa
A
alexsander_curty
Trouxe Correto, mas precisaria inserir essa condição. Preciso pegar a data mais recente e que o SALDO_ATUAL é menor que 41
A
alexfe
Cara assim a condição empoe restrição se o registro com ultima data não possui o saldo menor que 41 não vai trazer o que vc quer mesmo o sql estando correto. Vc está se confundindo
A
alexsander_curty
Mas é exatamente isso. Preciso selecionar apenas os registros mais recente com o saldo menor do que 41.
Na tabela existe varios registros com saldo inferior a 41, porem preciso pegar o mais recente.
A
alexsander_curty
Complementando se a data mais recente tiver o saldo atual maior que 41 nao precisa exibir.´
O Cod tem que exibir apenas a data mais recente que tem o saldo menor que 41.
Como faço isso no sql. estou que nem um louco procurando aqui no google.
A
alexsander_curty
Tambem tentei dessa forma e nao funcionou. $sql = "SELECT DISTINCT(N_CARTAO), SALDO_ATUAL, CLUSTER,MOTORISTA,PLACA,VALOR_TRANSACAO,N_CARTAO,DATA_TRASANCAO FROM combustivel WHERE DATA_TRASANCAO = (SELECT MAX(DATA_TRASANCAO) FROM combustivel WHERE N_CARTAO = N_CARTAO AND SALDO_ATUAL < '41' GROUP BY N_CARTAO)";
P
pmlm
Não estás a relacionar as duas tabelas, precisas de alias para distinguir a de “fora” com a de “dentro”:
"SELECT N_CARTAO, SALDO_ATUAL, CLUSTER, MOTORISTA, PLACA, VALOR_TRANSACAO, N_CARTAO, DATA_TRASANCAO FROM combustivel fora WHERE DATA_TRASANCAO = (SELECT MAX(DATA_TRASANCAO) FROM combustivel dentro WHERE fora.N_CARTAO = dentro.N_CARTAO -- aqui precisas de distinguir as tabelas AND SALDO_ATUAL < '41' GROUP BY N_CARTAO)"
Ou, mais facil ainda, obtens o primeiro registo da tabela quando ordenas por data. Este comando depende da Base de Dados
MySQL ou PostgreSQL:
"SELECT N_CARTAO, SALDO_ATUAL, CLUSTER, MOTORISTA, PLACA, VALOR_TRANSACAO, N_CARTAO, DATA_TRASANCAO FROM combustivel WHERE SALDO_ATUAL < '41' ORDER BY DATA_TRASANCAO DESC LIMIT 1
ORACLE:
"SELECT * FROM (SELECT N_CARTAO, SALDO_ATUAL, CLUSTER, MOTORISTA, PLACA, VALOR_TRANSACAO, N_CARTAO, DATA_TRASANCAO FROM combustivel WHERE SALDO_ATUAL < '41' ORDER BY DATA_TRASANCAO DESC ) WHERE rownum = 1
L
Lucio_Messias
Também estava com o mesmo problema. A fim de colaborar ajudando outros com a mesma dificuldade vou postar como realizei:
Guarda o código do registro e busca em um sub-select limitando ao resultado de 1 registro ordenado. A consulta fica mais pesada mas funciona.