Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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.
Só sugeri uma forma de validar a sql , lista aberto e verifique se a lógica fica aderente.
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!
Imagine as situações:
- Inserir 10 registros de cinco em cinco dias (01/09, 06/09, 11/09, 16/09, 21/09);
- Inserir 100 registros no mesmo dia;
- Inserir 100 registros no intervalo de 5 dias;
Acho que são alguns exemplo, como disse que testou de todas as formas, acredito que essas situações já devam ter sido consideradas.
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.
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
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!
Como se valida isto , na minha opinião :
Lista "aberto" para um (ou mais) usuários e verifica se a lógica funciona