Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Aprendiz/CE

Esse SELECT está correto?

Recommended Posts

Prezados,

 

Gostaria de saber se o SELECT logo abaixo está correto. O mesmo tem que me retornar os registros com datas dos últimos 5 (cinco) dias levando em conta a maior data encontrada entre todos os registros existentes.

SELECT ac.*, us.* FROM acessos ac
LEFT JOIN usuarios us ON ac.ace_login = us.usu_login
WHERE DATE(ac.ace_acesso) >= (SELECT DATE(date_sub(MAX(ace_acesso), INTERVAL 5 DAY)) FROM acessos)
ORDER BY ac.ace_acesso DESC

Fiz vários testes e aparentemente está funcionando corretamente, mas como não quero correr o risco de falhas na utilização do mesmo, conto com a ajuda de vocês para confirmar o resultado dos meus testes.

 

Grato e aguardo qualquer comentário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como se valida isto , na minha opinião :

 

Lista "aberto" para um (ou mais) usuários e verifica se a lógica funciona

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Motta, boa noite!

 

São duas tabelas simples, aonde uma é a de movimentos (acessos) e a outra de cadastros (usuários).

 

Estrutura reduzida das tabelas:

 

acessos:

ace_date - datetime

ace_login - varchar(10)

 

usuários:

usu_login - varchar(10)

 

Deu para entender? A relação é somente para exibir alguns dados cadastrais do usuários. O que me importa mesmo é saber se o "filtro" está correto da forma que estou utilizando. O que vai ser ou não exibido para mim é mero detalhe para o momento. Não se prenda a isso, Ok?

 

Grato pela sua atenção e aguardo o seu comentário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só sugeri uma forma de validar a sql , lista aberto e verifique se a lógica fica aderente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, bom dia!

 

Me desculpa, mas te confesso que não estou entendo o que o amigo quis dizer com "Só sugeri uma forma de validar a sql , lista aberto e verifique se a lógica fica aderente." O que exatamente você quer dizer com "validar", "lista aberta" e "aderente"? Posso até saber fazer o que você recomenda, mas a forma técnica de falar que você utilizou me deixou perdido (rs).

 

Mais uma vez agradeço pelo sua atenção e fico muito grato se o colega puder me ajudar.

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Imagine as situações:

  1. Inserir 10 registros de cinco em cinco dias (01/09, 06/09, 11/09, 16/09, 21/09);
  2. Inserir 100 registros no mesmo dia;
  3. Inserir 100 registros no intervalo de 5 dias;
  4. Inserir 100 registros, de uma semana atrás até hoje.

Acho que são alguns exemplo, como disse que testou de todas as formas, acredito que essas situações já devam ter sido consideradas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá lokaodomau,

 

A minha dúvida é se a INSTRUÇÃO SQL - SELECT está correta, ou seja, a sua estrutura da mesma.

 

Nos meus testes analiso 1, 2, 3, 30, 60 dias e aparentemente o retorno está correto. A minha dúvida existe pelo fato deu não definir períodos (BETWEEN) deixando o DB trabalhar e me retornar os registros conforme a movimentação disponível.

 

Grato pela sua atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma forma de validar um sql como o seu é

 

Listar aberto , isto é , listar todos os regitros

Para esta lista não ficar muito grande podemos reduzir á um caos , cliente , data , fornecedor etc

 

Assim sua sql

SELECT ac.*, us.* FROM acessos ac
LEFT JOIN usuarios us ON ac.ace_login = us.usu_login
WHERE DATE(ac.ace_acesso) >= (
      SELECT DATE(date_sub(MAX(ace_acesso), INTERVAL 5 DAY)) FROM acessos)
ORDER BY ac.ace_acesso DESC

seria tratada com a sql (por exemplo

SELECT ac.*, us.* FROM acessos ac
LEFT JOIN usuarios us ON ac.ace_login = us.usu_login
where us.usu_login = 'Aprendiz/CE'

Assim é possível verificar se o filtro aplicado ao WHERE atende ao que se queria originalmente

 

 

Espero ter ajudado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Motta, boa tarde!

 

Na realidade esse SELECT possui outros parâmetros para esse WHERE e um deles é exatamente esse recomendado por você ( where us.usu_login = 'Aprendiz/CE' ). Um outro parâmetro é o número de dias (INTERVAL 5 DAY) que não é fixo e é passado conforme a necessidade. Como eu quis ser bem objetivo e postei aqui somente a questão que realmente de deixava em duvidas.

 

Grato mais uma vez pela sua atenção e se tiver algo a acrescentar, não se furte.

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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