Skip to main content

MÊS ATUAL X MÊS ANO ANTERIOR COM O LUCRO

SELECT
    CASE 
        WHEN GV.DATA_EMISSAO BETWEEN 
            CAST(EXTRACT(YEAR FROM CURRENT_DATE) || '-' || 
                 EXTRACT(MONTH FROM CURRENT_DATE) || '-01' AS DATE)
            AND DATEADD(1 DAY TO DATEADD(-1 DAY TO 
                DATEADD(1 MONTH TO CAST(EXTRACT(YEAR FROM CURRENT_DATE) || '-' ||
                                         EXTRACT(MONTH FROM CURRENT_DATE) || '-01' AS DATE))))
        THEN 'Mês atual'      
        ELSE 'Mês do ano anterior'
    END AS PERIODO,

    -- AQUI renomeei de TOTAL_VENDIDO para TOTAL
    SUM(VI.VALOR_TOTAL) AS TOTAL,

    SUM(VI.QUANTIDADE * P.PRECO_CUSTO) AS TOTAL_CUSTO,

    SUM(VI.VALOR_TOTAL) - SUM(VI.QUANTIDADE * P.PRECO_CUSTO) AS LUCRO,

    CASE 
        WHEN SUM(VI.VALOR_TOTAL) = 0 THEN 0
        ELSE ((SUM(VI.VALOR_TOTAL) - SUM(VI.QUANTIDADE * P.PRECO_CUSTO)) / SUM(VI.VALOR_TOTAL)) * 100
    END AS MARGEM_PERCENTUAL

FROM VENDAS GV
INNER JOIN VENDAS_ITENS VI ON VI.ID_VENDA = GV.ID
INNER JOIN PRODUTOS P ON P.ID = VI.ID_PRODUTO

WHERE
    GV.STATUS = 'Venda faturada'
    AND (
        -- mês atual
        GV.DATA_EMISSAO BETWEEN 
            CAST(EXTRACT(YEAR FROM CURRENT_DATE) || '-' || 
                 EXTRACT(MONTH FROM CURRENT_DATE) || '-01' AS DATE)
            AND DATEADD(1 DAY TO DATEADD(-1 DAY TO 
                DATEADD(1 MONTH TO CAST(EXTRACT(YEAR FROM CURRENT_DATE) || '-' ||
                                         EXTRACT(MONTH FROM CURRENT_DATE) || '-01' AS DATE))))
        OR
        -- mesmo mês do ano anterior
        GV.DATA_EMISSAO BETWEEN 
            CAST((EXTRACT(YEAR FROM CURRENT_DATE) - 1) || '-' || 
                 EXTRACT(MONTH FROM CURRENT_DATE) || '-01' AS DATE)
            AND DATEADD(1 DAY TO DATEADD(-1 DAY TO 
                DATEADD(1 MONTH TO CAST((EXTRACT(YEAR FROM CURRENT_DATE) - 1) || '-' ||
                                         EXTRACT(MONTH FROM CURRENT_DATE) || '-01' AS DATE))))
    )

GROUP BY
    PERIODO;

image.png

98.fr3