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
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
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.
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.
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)";
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
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.
SELECT @A:=CODIGO_C, VALOR, DATA
,(
SELECT VALOR
FROM TAB1
WHERE CODIGO_C = @A
ORDER BY DATA DESC
LIMIT 1
) AS COLUNA
FROM TAB1
WHERE DATA BETWEEN '2019-01-01' AND '2019-08-30'
GROUP BY CODIGO_C