Ir para conteúdo
Luiz Antonio Barreto

Consultar um valor por data em uma tabela

Recommended Posts

Ola, gostaria de uma ajuda para fazer uma consulta no meu banco mysql. Tenho uma tabela onde tenho que pegar o maior valor de uma medição(float) por dia em um período de 1(um) mês.

 

Por dia o meu banco recebe  varias medições e tenho que pegar sempre a ultima medição do dia que sempre vai ser a maior, pois o valor da medição é crescente.

Eu pego o valor da medição a data e a hora dessa medição e salvo em um vetor, ou seja, dia 01/10/2018 na posição 1 do vetor e etc...

Obs: Gostaria de uma consulta para meu mysql para fazer meu sistema funcionar perfeitamente.

 

Segue em anexo a imagem da tabela no meu banco.

Hoje estou pegando todos os valores conforme o comando sql abaixo:

 

$sql ="select totalizacao,data,hora from medidor where data BETWEEN "
        . "'".$pesquisa_data_inicial."' and '".$pesquisa_data_final."' and grupo='".$chave."' "
               . "and serial='".$pesquisa_exibir_serie."' order by data asc,hora asc";

 

Obs: $variavel PHP

Obrigado.

tabela sql.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

No Oracle esta sintaxe funciona 

select totalizacao,data,hora 
from medidor m1
where data BETWEEN x1 and x2 
and grupo = '.....'  
and serial='....' 

and (data,hora) = (select max(m2.data,m2hora 
                   from medidor m2
                   where m2.serial = m1.serial)/*supondo serial seja a chave*/

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Motta,

 

ainda não deu certo, adaptei seu código no meu sistema e ficou conforme abaixo:

 


$sql = "select totalizacao,data,hora  from medidor m1
             where data BETWEEN "."'".$pesquisa_data_inicial."' and '".$pesquisa_data_final."'
and grupo='".$chave."'  "."  and serial='".$pesquisa_exibir_serie."'

and (data,hora) = (select MAX(m2.data,m2.hora)
                   from medidor m2
                 where m2.serial = m1.serial)";

 

 

Obs: dessa maneira não está printando nada da tabela, ve se tem algo errado no código se possível.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente 

 

CAST(data AS char)+CAST(hora AS char) = max(CAST(m2.data AS char)+CAST(m2.hora AS char))

 

 

 

 

mas não sei se é a melhor solução 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por _marlon307
      Tenho uma tabela em meu banco de dados em que as colunas usuário e e-mail são do tipo unio. Como faço para verificar as duas colunas ao mesmo tempo e retorna um valor se encontrar um registro iguai.
    • Por leonardo021970
      Tem alguma maneira de capturar todas as urls do site?
      Testei pelo google mas ele retorna apenas alguns resultados pelo jeito que testei
    • Por _marlon307
      Estou fazendo um sistema simples de cadastro de usuário e preciso que o usuário e e-mail sejam únicos. Mas já configurei a minha tabela para que esses campos seja único. O problema e fazer a checagem para que não retorne erros, e sim redirecionar para pagina de cadastro.
       
      Código:
      <?php require_once 'config/connect.php'; $usermail = mysqli_real_escape_string($link, $_POST['email']); $username = mysqli_real_escape_string($link, $_POST['usuario']); $userpsw = mysqli_real_escape_string($link, $_POST['senha']); $sql = "SELECT usuario, email FROM `tb_usuarios` WHERE `usuario` = '$username', `email` = '$usermail'"; mysqli_query($link, $sql) or die(mysqli_error($link)); $linhas = mysqli_affected_rows($link); if($linhas > 0) { header("Location:cadastro"); } else { $sql = "INSERT INTO tb_usuarios (usuario, senha, email) VALUES ('$username','$userpsw','$usermail')"; mysqli_query($link,$sql) or die(mysqli_error($link)); $linhas = mysqli_affected_rows($link); if($linhas > 0) { header("Location:login"); } } ?>  
    • Por eduardom
      Olá.
       
      Tentarei exemplificar o problema.
       
      Tenho uma tabela com duas colunas e seus respectivos conteúdos:
      VALOR (int), DATA (datetime)
      1, 2018-12-10 20:50:00
      5, 2018-12-13 12:00:00
      4, 2018-12-13 13:00:00
      3, 2018-12-13 17:00:00
      2, 2018-12-15 06:00:00
      9, 2018-12-15 08:00:00
       
      Consulto as informações, por exemplo:
       
      SELECT * FROM TABELA WHERE DATA BETWEEN '2018-12-13 00:00:00' AND '2018-12-13 23:59:59'
       
      Está me trazendo somente os valores 4 e 5, o 3 ele não trás, porém todos estão dentro do período.
      Com isso, estou perdendo registros nas consultas.
      Buscando somente o valor 3 direto, (SELECT * FROM TABELA WHERE VALOR = 3), ele trás a informação normalmente.
      Adicionei e removi os índices, tentei otimizar a tabela, porém nada resolve.
      Não sei se envolve o tamanho da tabela, pois há 2.782.219 registros na mesma.
       
      Estrutura da tabela: InnoDB
      Formatação da tabela: utf8_general_ci
       
      Se alguém tiver uma luz...
    • Por nosredna
      Olá amigos, vocês poderiam me ajudar?
       
      Eu tenho a input abaixo em PHP, quando eu acabar de digitar algo eu desejo que ela selecione o texto digitado automaticamente. É possível? Como eu faria?
      Exemplo abaixo:

       
      Agradeço a ajuda. Valeuuuu.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.