Translate

segunda-feira, 18 de novembro de 2013

PostgreSql AVG - Média

A função AVG retorna a média de valores de uma coluna. 
Serão descritos 6 exemplos de utilização desta função. 

Caso tenha interesse faça o download dos exemplos ou veja os scripts no github.


SINTAXE
SELECT AVG(nome_da_coluna) FROM nome_da_tabela;

Para os 6 exemplos abaixo, utilizaremos a tabela "tb_fornecedor". Veja a imagem abaixo:




1º Exemplo

Cenário: um funcionário quer calcular a média das despesas de uma empresa.

Solução: o valor das despesas estão armazenadas na coluna valor, logo devemos calcular a média dos valores desta coluna.
Para calcularmos a média, executamos a sentença abaixo:

SELECT AVG(valor) FROM tb_fornecedor;

Após a execução, teremos a média com as despesas. Conforme podemos visualizar na imagem abaixo:

O nome da coluna aparece como "avg", mas vamos supor que precisamos que seja exibido "media".
Podemos modificar o nome desta coluna, ou seja, criar um alias (apelido). Colocamos o alias depois do "AS
SELECT AVG(valorAS media FROM tb_fornecedor;

Após a execução, o nome da coluna será exibido como "media".


2º Exemplo

Cenário: O funcionário de uma empresa quer calcular a média das despesas por seguimento, ou seja:
  • A média dos gastos com o segmento Papelaria e informática
  • A média dos gastos com o segmento  Marcenaria
  • A média dos gastos com o segmento  Serralheria
  • A média dos gastos com o segmento  Limpeza e higiene

Solução: antes de efetuarmos a média, devemos agrupar os segmentos que estão armazenados na coluna "segmento". Para agruparmos utilizaremos o " GROUP BY".

Para calcularmos a média por segmento, executamos a sentença abaixo:

SELECT segmento, AVG(valor) AS media
FROM tb_fornecedor 
GROUP BY segmento;

Após a execução, teremos a média dos gastos agrupados por segmento. Conforme podemos visualizar na imagem abaixo:




Para ordenar as médias em ordem crescente, ou seja, do valor menor para o maior, deve-se usar "ORDER BY" seguido do nome da coluna, neste caso, a coluna 'mediaserá ordenada .
Para ordenar as médias, utilizamos a sentença abaixo:

SELECT 
segmento, 
AVG(valor) AS media
FROM tb_fornecedor 
GROUP BY segmento
ORDER BY media;

Após a execução, teremos as médias em ordem crescente. Conforme podemos visualizar na imagem abaixo:



Para ordenar as médias em ordem decrescente, ou seja, do maior valor para o menor devemos acrescentar o "DESC " depois do "ORDER BY".
Para ordenar as médias em ordem decrescente, utilizamos a sentença abaixo:

SELECT 
segmento, 
AVG(valor) AS media
FROM tb_fornecedor 
GROUP BY segmento
ORDER BY media DESC;

Após a execução, teremos as médias em ordem decrescente.  Conforme podemos visualizar na imagem abaixo:

3º Exemplo

Cenário: Este cenário é um pouco parecido com o anterior, vamos calcular as médias das despesas por segmento, mas agora considerando a quantidade de produtos.
Observação: perceba que foi incluída a coluna quantidade na tabela "tb_fornecedor".




Solução: dentro da função "AVG" devemos fazer a multiplicação da quantidade pelo valor do produto. Exemplo: a média com o segmento de "Limpeza e higiene",  foi de 111.6666666666666667, pois compramos
  • R$ 15,00 de detergente     (3 *   5,00);
  • R$ 200,00 de desinfetante (5 * 40,00);
  • R$ 120,00 de papel toalha (2 * 60,00);
Média para o segmento "Limpeza e higiene": 
(15,00 + 200,00 + 120,00) / 3 = 111.6666666666666667
    Para calcularmos a média por segmento, executamos a sentença abaixo:

    SELECT 
    segmento, 
    AVG(quantidade * valor) AS media 
    FROM tb_fornecedor 
    GROUP BY segmento
    ORDER BY media;

    Após a execução, teremos as médias por segmento. Conforme podemos visualizar na imagem abaixo:

    4º Exemplo

    Cenário: Vamos calcular a média das despesas por mês. Neste caso, para "setembro / 2013", "outubro / 2013" e "novembro / 2013".



    O primeiro passo é saber como extrair o mês e o ano de uma data. 

    Para extrair o mês e o ano de uma data podemos utilizar as funções "extract" ou "date_part". As duas funções são equivalentes no postgresql.

    Exemplo da utilização de extract:

    SELECT
    data, 
    extract(month from data) AS mes,
    extract(year from data) AS ano
    FROM tb_fornecedor;

    Significado:

    extract(parte_da_data from nome_da_coluna)
    • parte_da_data: podemos passar qual a parte da data que queremos, por exemplo,  day para o dia ou year para o ano, entre outros.
    • nome_da_coluna: nome da coluna de uma tabela. Neste caso vamos escolher a coluna "data" da tabela "tb_fornecedor".

    Exemplo da utilização de date_part:

    SELECT
    data, 
    date_part('month'data) AS mes,
    date_part('year'data) AS ano  
    FROM tb_fornecedor;

    Significado:
    • date_part('month'data) : extraia o mês (month, em inglês é mês) da coluna data;
    • AS mes: a coluna com o mês se chamará mês (alias);
    • date_part('year'   data) : extraia o ano  (year,    em inglês é ano) da coluna data;
    • AS ano: a coluna com o ano se chamará ano (alias);
    Após a execução, teremos uma coluna com o ano, e uma coluna com o mês. Conforme podemos visualizar na imagem abaixo:


    Agora que já sabemos utilizar as funções "date_part" e "extract", vamos utilizá-las para fazer o calculo das médias das despesas para os meses de setembro, outubro e novembro de 2013.

    Utilizando extract:
    SELECT 
    extract(month from data) AS mes,
    AVG(quantidade * valor) AS media
    FROM tb_fornecedor
    WHERE extract(year from data) = 2013 
    GROUP BY mes
    ORDER BY mes;

    Utilizando date_part:
    SELECT 
    date_part('month', data) AS mes,
    AVG(quantidade * valor) AS media
    FROM tb_fornecedor
    WHERE date_part('year', data) = 2013 
    GROUP BY mes
    ORDER BY mes;

    Após a execução, teremos a média para cada mês.



    Caso queiramos exibir os meses por extenso, ou seja, setembro, outubro e novembro podemos utilizar a função "to_char" do postgre para formatar a data, conforme podemos verificar nas sentenças abaixo:

    Utilizando extract:
    SELECT
    extract(month FROM data) AS mes_num,
    /*Formata a data em português devido ao prefixo TM. Em caso de dúvida veja o artigo de formatação de data*/ 
    to_char(data, 'TMMonth "/" YYYY') AS mes, 
    AVG(quantidade * valor) AS media
    FROM tb_fornecedor
    WHERE extract(year FROM data) = 2013 
    GROUP BY mes_num, mes
    ORDER BY mes_num;

    Utilizando date_part:
    SELECT
    date_part('month', data) AS mes_num,
    /*Formata a data em português devido ao prefixo TM. Em caso de dúvida veja o artigo de formatação de data*/ 
    to_char(data, 'TMMonth "/" YYYY') AS mes, 
    AVG (quantidade * valor) AS media
    FROM tb_fornecedor
    WHERE date_part('year', data) = 2013 
    GROUP BY mes_num, mes
    ORDER BY mes_num;

    Após a execução, o mês será exibido por extenso. Conforme podemos visualizar na imagem abaixo:


    5º Exemplo

    Cenário: Vamos calcular a média das despesas por mês e por segmento. 

    Solução: Para isso vamos agrupar por mês e segmento, ou seja o "GROUP BY" será acompanhado pelo mês e pelo segmento.

    Utilizando extract:
    SELECT
    extract(month FROM data)  AS mes,
    segmento, 
    AVG(quantidade * valor) AS media
    FROM tb_fornecedor
    WHERE extract(year FROM data) = 2013 
    GROUP BY messegmento
    ORDER BY messegmento;

    Utilizando date_part:
    SELECT
    date_part('month', data) AS mes,
    segmento, 
    AVG(quantidade * valor) AS media
    FROM tb_fornecedor
    WHERE date_part('year', data) = 2013 
    GROUP BY mes segmento
    ORDER BY messegmento;

    Após a execução, as médias das despesas serão agrupadas por mês e segmento. Conforme podemos visualizar na imagem abaixo:





    Caso queiramos exibir os meses por extenso, ou seja, setembro, outubro e novembro podemos utilizar a função "to_char" na sentença:

    Utilizando extract:
    SELECT
    extract(month FROM data) AS mes_num,
    /*Formata a data em português devido ao prefixo TM. Em caso de dúvida veja o artigo de formatação de data*/ 
    to_char(data, 'TMMonth "/" YYYY') AS mes,
    segmento, 
    AVG(quantidade * valor) AS media
    FROM tb_fornecedor
    WHERE extract(year FROM data) = 2013 
    GROUP BY mes_num, mes,  segmento
    ORDER BY mes_num, segmento;

    Utilizando date_part:
    SELECT
    date_part('month', data) AS mes_num,
    /*Formata a data em português devido ao prefixo TM. Em caso de dúvida veja o artigo de formatação de data*/ 
    to_char(data, 'TMMonth "/" YYYY') AS mes,
    segmento, 
    AVG(quantidade * valor) AS media
    FROM tb_fornecedor
    WHERE date_part('year', data) = 2013 
    GROUP BY mes_num, mes,  segmento
    ORDER BY mes_num, segmento;

    Após a execução, o meses serão exibidos por extenso. Conforme podemos visualizar na imagem abaixo:



    6º Exemplo

    Cenário: queremos saber quais os meses em que as médias das despesas ultrapassaram R$ 600,00, ou seja, foram maior que R$ 600,00?



    Solução: para sabermos quais os meses em que a média das despesas ultrapassaram R$ 600,00 vamos adicionar a clausula "HAVING" a sentença.

    Utilizando extract:
    SELECT
    extract(month FROM data) AS mes_num,
    /*Formata a data em português devido ao prefixo TM. Em caso de dúvida veja o artigo de formatação de data*/ 
    to_char(data, 'TMMonth "/" YYYY') AS mes, 
    AVG(quantidade * valor) AS media
    FROM tb_fornecedor
    WHERE extract(year FROM data) = 2013 
    GROUP BY mes_num, mes
    HAVING AVG(quantidade * valor) > 600
    ORDER BY mes_num;

    Utilizando date_part:
    SELECT
    date_part('month', data) AS mes_num,
    /*Formata a data em português devido ao prefixo TM. Em caso de dúvida veja o artigo de formatação de data*/ 
    to_char(data, 'TMMonth "/" YYYY') AS mes, 
    AVG(quantidade * valor) AS media
    FROM tb_fornecedor
    WHERE date_part('year', data) = 2013 
    GROUP BY mes_num, mes
    HAVING AVG(quantidade * valor) > 600
    ORDER BY mes_num;

    Após a execução, só serão exibidos os meses nos quais as médias das despesas ultrapassaram R$ 600,00. Conforme podemos visualizar na imagem abaixo:


    quarta-feira, 13 de novembro de 2013

    Mysql - diferença entre datas

    Neste post vamos apresentar 4 exemplos de como calcular a diferença entre datas.

    Caso tenha interesse, faça o download dos scripts no Google Drive ou veja no GitHub.

    Para calcular a diferença entre duas datas, em dias, utilizamos a função "DATEDIFF". Esta função é utilizada no 1º e 2º exemplos.

    DATEDIFF (data_final, data_inicial)

    Também podemos utilizar a função "TIMESTAMPDIFF" para calcular a diferença entre datas. Esta função é utilizada no 3º e 4º exemplos.

    TIMESTAMPDIFF (unidade_de_tempo, data_inicial, data_final)

    A unidade de tempo pode ser:
    • YEAR: retorna a quantidade de anos completos;
    • MONTH: retorna a quantidade de meses completos;
    • DAY: retorna a quantidade de dias completos;
    • HOUR: retorna a quantidade de horas completas;
    • MINUTE: retorna a quantidade de minutos completos;
    • SECOND: retorna a quantidade de segundos completos;
    • QUARTER: retorna a quantidade de trimestres completos;

    1º Exemplo

    Cenário: em uma imobiliária, um funcionário precisa fazer um levantamento de quantos dias são necessários para alugar os imóveis. Para fazer este cálculo vamos utilizar a tabela "tb_locacao". Esta tabela possui três colunas:

    • imovel_id: número de identificação do imóvel;
    • data_oferta: data de início da oferta do imóvel;
    • data_locacao: a data em que o imóvel foi alugado;
    Veja a imagem da tabela "tb_locacao":



    Solução: temos que calcular a diferença entre as colunas "data_locação" e "data_oferta".

    Para calcularmos a diferença em dias executamos a sentença abaixo:

    SELECT
    imovel_id,
    data_oferta,
    data_locacao,
    /*Calculo da diferença entre a data da locação e a data de oferta*/
    DATEDIFF (data_locacao, data_oferta) AS quantidade_dias
    FROM tb_locacao;

    Após executarmos a sentença acima, teremos o resultado exibido na tabela abaixo:


    Observação: caso seja necessário incluir o primeiro dia na contagem dos dias, acrescente um dia ao calculo de diferença de datas, veja a sentença a seguir:

    SELECT
    imovel_id,
    data_oferta,
    data_locacao,
    DATEDIFF (data_locacao, data_oferta) AS quantidade_dias,
    /*Calculo da diferença entre a data da locação e a data de oferta, levando em consideração o primeiro dia*/
    ABS(DATEDIFF (data_locacao, data_oferta)) + 1 AS quantidade_dias_primeiro_dia 
    FROM tb_locacao;

    Após executarmos a sentença acima, teremos o resultado exibido na tabela a seguir:




    Perceba que utilizamos a função "ABS" antes de somar um 1 dia a diferença. 
    A função ABS, garante que não seja retornado resultado da diferença negativo. 


    Quando o resultado da diferença é negativo?

    Se a data final for menor que a data inicial.

    Hipótese:
    Se o imóvel que possui id igual a 1 tivesse: 
    • a data_oferta     =  2013-08-17
    • a data_locacao  =  2013-08-01

    O resultado seria -17  ao invés 17


    2º Exemplo

    Cenário: uma loja virtual vai oferecer uma oferta especial, aos clientes que estão cadastrados a mais de 90 dias no seu site. Para fazer este cálculo vamos utilizar a tabela "tb_cadastro". Esta tabela possui duas colunas:

    • cliente_id: número de identificação do cliente;
    • data_cadastro: data de cadastro do cliente;
    Veja a imagem da tabela "tb_cadastro":


    Solução: temos que calcular a diferença entre o dia atual (hoje) e a coluna data_cadastro.
    Antes de efetuarmos o cálculo devemos saber como retornar o dia atual.
    Para retorna o dia atual utilizamos a função:

    CURRENT_DATE

    OU

    CURDATE()

    Para exibirmos o dia atual execute a sentença abaixo (quando executei esta sentença o dia era 13/11/2013):

    SELECT CURRENT_DATE;

    OU

    SELECT CURDATE()


    Agora que já conhecemos a função que calcula o dia atual (hoje), vamos executar a sentença para verificar os clientes que estão cadastrados a mais de 90 dias.

    SELECT
    cliente_id,
    data_cadastro,
    /*calcula a diferença em dias completos*/
    DATEDIFF(CURDATE(), data_cadastro) AS quantidade_dias
    FROM tb_cadastro
    /*filtra somente os clientes que são cadastrados há mais que 90 dias*/
    WHERE DATEDIFF(CURDATE(), data_cadastro) > 90;

    Após executarmos a sentença acima, filtramos os clientes que estão cadastrados a mais de 90 dias. Veja a imagem na tabela abaixo:

    Observações
    Se você colocar a data inicial antes da data final, como está exibido abaixo, a diferença será negativa.

    DATEDIFF(data_inicial, data_final)

    3º Exemplo

    Cenário: uma fábrica quer calcular o periodo de utilização da seus equipamentos, em anos. Para fazer este cálculo vamos utilizar a tabela "tb_equipamento". Esta tabela possui duas colunas:
    • equipamento_id: número de identificação do equipamento;
    • data_inicio: data de inicio da utilização do equipamento;
    • data_encerramento: data de encerramento da utilização do equipamento;
    Veja a imagem da tabela "tb_equipamento":


    Solução: temos que calcular a diferença entre a coluna data_encerramento e a coluna data_inicio.

    SELECT
    equipamento_id,
    data_inicio,
    data_encerramento,
    /*calcula a diferença em anos completos*/
    TIMESTAMPDIFF(YEAR , data_inicio, data_encerramento) AS periodo_anos
    FROM tb_equipamento;




    4º Exemplo

    Cenário: vamos calcular o período dos equipamentos mas agora em anos, meses, dias, horas, minutos e segundos.
    Veja a imagem da tabela "tb_equipamento":


    Para calcularmos o período, executamos a sentença abaixo:

    SELECT 
    data_inicio,
    data_encerramento,
    /**
     *Calcular a diferença em anos.
     */
    TIMESTAMPDIFF(YEAR, data_inicio, data_encerramento) AS anos ,
    /**
     *Calcular a diferença em meses.
     *Não vão ser contados os meses que já entraram na contagem dos anos completos.  
     */
    TIMESTAMPDIFF
    (
    MONTH, 
    data_inicio + INTERVAL TIMESTAMPDIFF(YEAR,  data_inicio, data_encerramento) YEAR , 
    data_encerramento
    ) AS meses,
    /**
     *Calcular a diferença em dias.
     *Não vão ser contados os dias que já entraram na contagem dos meses completos.  
     */
    TIMESTAMPDIFF
    (
    DAY
    data_inicio + INTERVAL TIMESTAMPDIFF(MONTH, data_inicio, data_encerramento) MONTH
    data_encerramento
    ) AS dias ,
    /**
     *Calcular a diferença em horas.
     *Não vão ser contadas as horas que já entraram na contagem dos dias completos.  
     */
    TIMESTAMPDIFF
    (
    HOUR
    data_inicio + INTERVAL TIMESTAMPDIFF(DAY,  data_inicio, data_encerramento) DAY
    data_encerramento
    ) AS horas,
    /**
     *Calcular a diferença em minutos.
     *Não vão ser contados os minutos que já entraram na contagem das horas completas.  
     */
    TIMESTAMPDIFF
    (
    MINUTE
    data_inicio + INTERVAL TIMESTAMPDIFF(HOUR,  data_inicio, data_encerramento) HOUR
    data_encerramento
    ) AS minutos,
    /**
     *Calcular a diferença em segundos.
     *Não vão ser contados os segundo que já entraram na contagem dos minutos completos.  
     */
    TIMESTAMPDIFF
    (
    SECOND
    data_inicio + INTERVAL TIMESTAMPDIFF(MINUTE,  data_inicio, data_encerramento) MINUTE, 
    data_encerramento
    ) AS segundos
    FROM tb_equipamento;

    Após a execução da sentença temos o resultado a seguir:










    Em breve postarei mais exemplos de função com data.

    Postgresql - diferença entre datas

    Neste post vamos apresentar 4 exemplos de como calcular a diferença entre datas.

    Caso tenha interesse, faça o download ou veja o script no Github.

    Para calcular a diferença entre duas datas, em dias, no postgresql utilizamos o operador aritmético menos "-".
    data_final - data_inicial

    Para calcular a diferença entre duas datas, em dias, meses e anos utilizamos a função age.

    age(data_final, data_inicial)

    1º Exemplo

    Cenário: em uma imobiliária, um funcionário precisa fazer um levantamento de quantos dias são necessários para alugar os imóveis. Para fazer este cálculo vamos utilizar a tabela "tb_locacao". Esta tabela possui três colunas:
    • imovel_id: número de identificação do imóvel;
    • data_oferta: data de início da oferta do imóvel;
    • data_locacao: a data em que o imóvel foi alugado;
    Veja a imagem da tabela "tb_locacao":


    Solução: temos que calcular a diferença entre as colunas "data_locação" e "data_oferta":

    Para calcularmos a diferença em dias executamos a sentença abaixo:

    SELECT
    imovel_id,
    data_oferta,
    data_locacao,
    /*Calculo da diferença entre a data da locação e a data de oferta*/
    data_locacao - data_oferta AS quantidade_dias
    FROM tb_locacao;

    Após executarmos a sentença acima, teremos o resultado exibido na tabela abaixo:


    Caso seja necessário incluir o primeiro dia na contagem da diferença, subtraia o intervalo de 1 dia da coluna "data_oferta" (data inicial) . Veja a sentença abaixo:

    SELECT
    imovel_id,
    data_oferta,
    data_locacao,
    data_locacao - data_oferta AS quantidade_dias,
    /*Calculo da diferença entre a data da locação e a data de oferta, incluindo na contagem o primeiro dia*/
    data_locacao - (data_oferta  -  INTERVAL '1 DAY')  :: DATE  AS dif_dias_primeiro_dia
    FROM tb_locacao;

    Após executarmos a sentença acima, teremos o resultado exibido na tabela abaixo:


    Observação: perceba que quando subtraímos datas o primeiro dia não é considerado, se precisarmos considerar o 1º dia devemos descontar um dia data inicial utilizando "INTERVAL".  

    2º Exemplo

    Cenário: exibir o período necessário para alugar os imóveis (idêntico ao exemplo anterior), mas no seguinte formato.
    x anos y meses z dias 


    Para calcularmos a diferença no formato acima, executamos a sentença a seguir:

    SELECT
    imovel_id,
    data_oferta,
    data_locacao,
    /*Calculo da diferença entre a data da locação e a data de oferta*/
    AGE(data_locacao, data_oferta) AS intervalo
    FROM tb_locacao;


    Após executar a sentença acima é exibido o seguinte resultado:




    O intervalo é exibido em inglês. Para exibir o formato em português utilizamos a função to_char para formatar o resultado da função age. Para conhecer mais sobre a função to_char, leia o artigo PostgreSql - Formatar data

    TO_CHAR(valor, formato)

    Veja abaixo alguns formatos:

    FORMATOS QUE PODEM SER UTILIZADOS NA FUNÇÃO TO_CHAR
    Formato Descrição
    YYYY ano
    YY 2 últimos digitos do ano
    MM Mês de 01 à 12
    DD Dia  de 01 à 31
    HH Hora do dia de 01 à 12
    HH12 Hora do dia de 01 à 12
    HH24 Hora do dia de 01 à 24
    MI Minuto do dia de 01 à 59
    SS Segundo do dia de 01 à 59
    MS Milissegundo do dia de 000 à 999
    US Micro-segundo do dia de 000000 à 999999
    MONTH Nome do mês em maiúsculo. Exemplo: JANEIRO
    month Nome do mês em minúsculo. Exemplo: janeiro
    Month Nome do mês com a primeira letra em maiúsculo. Ex.: Janeiro
    DAY Nome do dia em maiúsculo. Ex.: SEGUNDA
    day Nome do dia em minúsculo. Ex.: segunda
    Day Nome do dia com a primeira letra em maiúsculo. Ex.: Segunda
    D Dia da semana de 1 à 7. Domingo = 1 e Sábado = 7.
    DDD Dia do ano de 1 à 365 ou 366 (bissexto).
    WW Dia da semana de 1 à 53.

    Consulte outros formatos no manual do postgresql.

    A sentença abaixo formatara o intervalo em dia, mês e ano.

    SELECT
    imovel_id,
    data_oferta,
    data_locacao,
    /*Calculo da diferença entre a data da locação e a data de oferta*/
    TO_CHAR ( AGE(data_locacao, data_oferta) , 'YY "ano(s)" MM "mes(es)" DD "dia(s)" ' ) AS intervalo
    FROM tb_locacao;

    Perceba que "ano(s)", "mes(es)" e "dias" estão entre aspas duplas para que a função to_char não os converta e ocorra um erro.

    Após a execução da sentença, será exibido o seguinte resultado:



    3º Exemplo

    Cenário: uma loja virtual vai oferecer uma oferta especial, aos clientes que estão cadastrados a mais de 90 dias no seu site. Para fazer este cálculo vamos utilizar a tabela "tb_cadastro". Esta tabela possui duas colunas:

    • cliente_id: número de identificação do cliente;
    • data_cadastro: data de cadastro do cliente;
    Veja a imagem da tabela "tb_cadastro":


    Solução: temos que calcular a diferença entre o dia atual (hoje) e a coluna "data_cadastro". Antes de efetuarmos o cálculo devemos saber como retornar o dia atual.
    Para retorna o dia atual utilizamos a função:

    CURRENT_DATE

    Para exibir o dia atual execute a sentença abaixo (quando executei esta sentença o dia era 04/03/2014):

    SELECT CURRENT_DATE;


    Agora que já conhecemos a função que calcula o dia atual (hoje), vamos executar a sentença para verificar os clientes que estão cadastrados a mais de 90 dias.

    SELECT 
    cliente_id,
    data_cadastro,
    /*calcula a diferença de dias*/
    CURRENT_DATE  - data_cadastro AS quantidade_dias
    FROM tb_cadastro
    /*filtra somente os clientes que são cadastrados há mais que 90 dias*/
    WHERE CURRENT_DATE  - data_cadastro > 90;

    Após executarmos a sentença acima, filtramos os clientes que estão cadastrados a mais de 90 dias. Veja a imagem na tabela abaixo:



    4º Exemplo

    Cenário: uma fábrica quer saber quais os equipamentos ficaram por um período maior igual a 80 horas em manutenção. Vamos utilizar a tabela "tb_manutencao" para fazer esta consulta, veja a imagem abaixo:


    Esta tabela possui 3 colunas:
    • equipamento_id: número de identificação de equipamento;
    • data_inicio: data de inicial de manutenção do equipamento;
    • data_final: data final de manutenção do equipamento;

    Após executarmos a sentença abaixo, filtramos os equipamentos que ficaram em manutenção por 80 ou mais horas.

    SELECT
    equipamento_id,
    data_inicio,
    data_final,
    AGE(data_final, data_inicio)
    FROM tb_manutencao
    WHERE AGE(data_final, data_inicio) >= '80 hour'

    Veja o resultado na imagem abaixo:

    Repare que o intervalo é retornado em dias e horas. 

    1 day = 24 horas

    Para comprovar que os intervalos do primeiro e segundo registros tem um período igual ou superior a 80 horas, vamos efetuar o calculo:

    Primeiro registro:
    3 days 16:51:54 = 3* 24 h + 16:51:54 h = 88:51:54

    Segundo registro:
    3 days 13:03:55 = 3* 24 h + 13:03:55 h = 85:03:55 
    Em breve postarei mais exemplos de funções com data.