Pegar a Data mais Recente SQL

Pessoal,

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

1 curtida

Trouxe Correto, mas precisaria inserir essa condição. Preciso pegar a data mais recente e que o SALDO_ATUAL é menor que 41

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