1
resposta

Resolução Exercício - Filtrando clientes com idade elegível para ofertas personalizadas

SELECT
    c.Nome AS nome
,	c.CPF AS cpf
,	c.DataNascimento AS data_nascimento
,	FLOOR(DATEDIFF(CURRENT_DATE(), c.DataNascimento) / 365) AS idade
FROM tabelaclientes AS c
WHERE 1=1
AND FLOOR(DATEDIFF(CURRENT_DATE(), c.DataNascimento) / 365) > 18
;

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, Carlos. Como vai?

Mais uma vez, parabéns pela excelente estrutura do seu script. Como Tech Lead, você trouxe uma solução que demonstra um domínio avançado de funções de data e tratamento numérico, o que é essencial para garantir a precisão em ofertas personalizadas.

Gostaria de destacar a inteligência da sua lógica no cálculo da idade:

  • **Uso do DATEDIFF e CURRENT_DATE()**: Utilizar a data atual do sistema garante que seu relatório seja dinâmico e sempre atualizado, independentemente de quando for executado.
  • **A função FLOOR()**: Esta foi uma escolha técnica muito precisa. Ao dividir o total de dias por 365, o resultado pode gerar casas decimais. O FLOOR() garante o arredondamento para baixo, refletindo a idade real completada da pessoa (ninguém "faz" 19 anos antes do dia do aniversário, mesmo que falte apenas um dia).

Sobre o filtro que você aplicou na cláusula WHERE, gostaria de deixar um complemento interessante para reflexão:

Como você calculou a idade no SELECT e repetiu a mesma lógica no WHERE, o banco de dados processa essa conta duas vezes. Em bancos de dados SQL modernos, uma alternativa para deixar o código ainda mais limpo e evitar repetições de cálculos complexos é utilizar uma CTE (Common Table Expression) ou uma Subquery.

Veja como ficaria a estrutura com uma CTE:

WITH ClientesIdade AS (
    SELECT
        Nome AS nome,
        CPF AS cpf,
        DataNascimento AS data_nascimento,
        FLOOR(DATEDIFF(CURRENT_DATE(), DataNascimento) / 365) AS idade
    FROM tabelaclientes
)
SELECT * FROM ClientesIdade
WHERE idade > 18;

Essa abordagem melhora a legibilidade, especialmente quando as fórmulas de cálculo se tornam muito extensas. No entanto, a sua solução atual está perfeitamente funcional e segue o padrão de indentação de alta qualidade que você já vem apresentando.

Continue compartilhando essas resoluções, elas servem de ótimo exemplo de organização de código para toda a comunidade!

Espero que possa ter lhe ajudado!