Cálculos financeiros, consultas SQL e o mercado de ações – Parte I

Olá Pessoal,

Estou convicto de que alguns que lêem esse post devem estar no mínimo bastante curiosos sobre qual é a relação entre cálculos financeiros, consultas SQL e o mercado de ações (ainda mais nessa época de fortes crises e retrações). Seria muito filosófico tentar descobrir (acho que renderia muitos pastéis e cervejas em algum buteco por aí), mas o propósito desse posts não é tentar encontrar essa relação, nem ajudar a investir em ações usando SQL, nem recomendar a compra de ações de empresas de banco de dados, ou algo nesse sentido. Para ninguém se sentir enganado e achar que coloquei esse post apenas para chamar a atenção, eu garanto que o click não será perdido. Hoje falarei apenas como realizar consultas comuns envolvendo o mercado financeiro. Irei expor alguns conceitos simples, mas o foco será na SQL e não no mercado de ações.

Lucro, margem de lucro e rentabilidade

Lucro e rentabilidade são termos que muitas vezes são utilizados de forma intercambiável, mas que contabilmente falando não significam a mesma coisa. O lucro significa um aumento no capital ou patrimônio de uma organização em um dado período. Ele significa o quanto que essa organização aumentou em termos absolutos, ou seja, o que ela obteve de benefícios descontando-se os custos necessários. Se uma empresa teve um custo de R$ 5 milhões em um determinado período, mas conseguiu faturar R$ 6 milhões no mesmo período podemos dizer que ela obteve um lucro líquido de R$ 2 milhões. A forma mais elementar de lucro é fazer a subtração entre o faturamento e o custo. Se o faturamento for superior ao custo, houve lucro. Se o faturamento for semelhante ao custo houve um equilíbrio. Se o faturamento for inferior ao custo houve um prejuízo.

Se o lucro é um termo absoluto, podemos dizer que a margem de lucro é um termo relativo, pois, ela não é expressa em nenhuma unidade de grandeza como reais, dólares, euros, etc mas sim em termos relativos ou percentuais. No mesmo exemplo, se a organização teve o custo de R$ 5 milhões e faturou R$ 6 milhões significa que para cada real ela consegui transformar esse real em R$ 1,20. Em outras palavras, ela obteve a margem de lucro 20%. Esse percentual indica em termos relativos o quanto a organização conseguiu ampliar ou reduzir o capital investido. Em situações de prejuízo, a margem de lucro é calculada da mesma forma. Como uma situação de prejuízo mostrará um valor negativo, convenciona-se que o valor deve ser positivo (ainda que indique uma "margem de prejuízo").

A rentabilidade não pode ser calculada com base apenas em um período uma vez que ela significa o quanto uma determinada organização melhorou ou piorou em relação a um período passado. Se uma instituição é avaliada em R$ 2 milhões em um ano e no ano seguinte é avaliada em R$ 2,4 milhões significa que cada R$ 1,00 investido na empresa resultou em R$ 1,20 no ano seguinte (R$ 0,20 de lucro por cada real investido). O cálculo da rentabilidade pode ser realizado dividindo-se o lucro, ou seja, a diferença entre o valor atual (R$ 2,4 milhões) e referência passada (R$ 2 milhões), pela referência passada. No caso, a rentabilidade é de 20% ao ano visto que o lucro é de R$ 400 mil (diferença entre R$ 2,4 milhões e R$ 2 milhões) dividido pelo valor investido R$ 2 milhões.

O cálculo da rentabilidade é um pouco diferente em situações de prejuízo. Se uma organização é avaliada em R$ 2 milhões em um ano e no ano seguinte é avaliada em R$ 1,6 milhões há uma diminuição do valor da organização e nesse caso a rentabilidade é negativa. O cálculo da desvalorização nesse caso é feito dividindo-se o valor do prejuízo pela referência passada, ou seja, R$ 400 mil por R$ 2 milhões que equivale 20% de perda. Na prática seria o mesmo cálculo para situações de lucro. O sinal apenas seria invertido.

Para testarmos os conceitos, nada como um bom exercício para iniciarmos (o mais divertido ainda está por vir). Irei postar as respostas, mas é interessante tentar resolver sem recorrer às respostas de imediato. Poderíamos ter tabelas prontas de receitas e despesas, mas gosto de tentar propor exemplos adaptáveis a qualquer realidade e nem sempre a situação é tão simplista.

— Cria uma tabela de lançamentos contábeis
CREATE TABLE Lancamentos (
    IDLanc INT IDENTITY(1,1) NOT NULL,
    Data SMALLDATETIME,
    Valor SMALLMONEY,
    Tipo CHAR(1),
CONSTRAINT PK_Lancamento PRIMARY KEY (IDLanc),
CONSTRAINT CK_Tipo CHECK (Tipo IN (‘C’,‘D’)))

— Insere alguns lançamentos contábeis
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20081005’,190,‘D’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20081009’,290,‘C’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20081011’,410,‘D’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20081014’,780,‘C’)

INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20081103’,560,‘C’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20081110’,320,‘D’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20081113’,700,‘D’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20081114’,970,‘C’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20081129’,100,‘C’)

INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20081215’,490,‘C’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20081217’,930,‘C’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20081218’,280,‘D’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20081219’,110,‘D’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20081223’,320,‘D’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20081226’,470,‘D’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20081230’,780,‘C’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20090108’,230,‘D’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20090116’,570,‘D’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20090119’,990,‘C’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20090121’,840,‘C’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20090125’,160,‘D’)
INSERT INTO Lancamentos (Data, Valor, Tipo) VALUES (‘20090131’,330,‘D’)

A missão é relativamente simples. Calcular o lucro, a margem de lucro e a rentabilidade de cada mês (nesse caso em relação ao mês anterior). Antes de iniciar o cálculo, precisamos de uma valor inicial de avaliação da empresa. Digamos que em 01/10/2008 (quando a empresa iniciou suas atividades) ela estava avaliada em R$ 15 mil. Quem desejar tentar por conta própria é um ótimo exercício. Adianto as respostas na tabela abaixo:

Mes

Faturamento

Custo

MargemLucro

Lucro

ValorEmpresa

Rentabilidade

01/11/2008

1070,00

600,00

0,7833

470,00

15470,00

0,0313

01/12/2008

1630,00

1020,00

0,5980

610,00

15610,00

0,0394

01/01/2009

2200,00

1180,00

0,8644

1020,00

16020,00

0,0634

01/02/2009

1830,00

1290,00

0,4186

540,00

15540,00

0,0315

Quem não se aventurar, vejamos passo como obter essas apurações contábeis. Como tudo depende do lucro, é fundamental sua apuração prévia para posteriormente calcular as demais métricas. Admitindo-se que o faturamento consistirá nos lançamentos de crédito (C) e que o custo consistirá nos lançamentos de débito, a soma de todos os lançamentos de crédito consiste o faturamento do mês enquanto a soma de todos os débitos consiste o custo do mês. A diferença naturalmente revela o lucro ou prejuízo. Para simplificar o cálculo, é recomendável tentar calcular primeiramente o faturamento e posteriormente o custo.

— Apurar o faturamento de cada mês
SELECT Data, Sum(Valor) As Faturamento
FROM Lancamentos
WHERE Tipo = ‘C’
GROUP BY Data

A utilização da função SUM e da cláusula GROUP BY é quase que imediata, mas sua simples aplicação pode frustar os mais ansiosos. Os lançamentos são feitos por dia e não por mês. Se a função SUM e GROUP BY forem utilizadas da forma proposta acima, o faturamento calculado será por dia e não por mês. Uma alternativa é utilizar as funções YEAR, MONTH ou o CONVERT, mas prefiro não adotar essas alternativas. É preciso lembrar que a rentabilidade é calculada com base no período anterior e transformação de uma data para outros tipos de dados com funções como YEAR, MONTH ou CONVERT irá dificultar esse cálculo ou necessitar de uma segunda conversão.

Irei adotar a convenção do primeiro dia do mês. Embora o primeiro dia do mês o lucro não possa ser apurado, essa será uma mera convenção para facilitar o agrupamento. Seria mais lógico utilizar o último dia do mês, mas nem todos os meses terminam no mesmo dia e no caso do mês de fevereiro esse dia pode variar. É necessário então utilizar um artifício de converter todas as datas de lançamento para o primeiro dia do mês em que elas foram lançadas. O código abaixo se propõe a fazer isso.

— Converter todos os lançamentos para o dia primeiro
SELECT DATEADD(D,1-Day(Data),Data) As Mes, Valor, Tipo FROM Lancamentos

Para cada data, o código irá substrair o número de dias. Se a data for por exemplo 05/10/2008, o código irá retirar 5 dias dessa data obtendo 30/09/2008 que é o último dia do mês anterior. Como o objetivo é obter o primeiro dia do mês é adicionado um dia a mais (por isso 1 – DAY). Agora o agrupamento pode ser aplicado sem maiores problemas.

— Apurar o faturamento de cada mês
SELECT DATEADD(D,1-Day(Data),Data) As Mes, Sum(Valor) As Faturamento
FROM Lancamentos
WHERE Tipo = ‘C’
GROUP BY DATEADD(D,1-Day(Data),Data)

— Apurar o custo de cada mês
SELECT DATEADD(D,1-Day(Data),Data) As Mes, Sum(Valor) As Custo
FROM Lancamentos
WHERE Tipo = ‘D’
GROUP BY DATEADD(D,1-Day(Data),Data)

Os valores de faturamento e custo visualmente podem ajudar, mas talvez fosse mais interessante exibí-los juntos e por mês. É possível utilizar CTEs ou Subqueries e um JOIN entre as consultas acima, para posteriormente obter o lucro mensal, mas farei isso de uma forma um pouco mais direta.

— Apurar o faturamento de cada mês
SELECT DATEADD(D,1-Day(Data),Data) As Mes,
    Sum(CASE Tipo WHEN ‘C’ THEN Valor ELSE 0 END) As Faturamento,
    Sum(CASE Tipo WHEN ‘D’ THEN Valor ELSE 0 END) As Custo,
    Sum(CASE Tipo WHEN ‘C’ THEN Valor ELSE – Valor END) As Lucro
FROM Lancamentos
GROUP BY DATEADD(D,1-Day(Data),Data)

A consulta já retornou os principais dados para obtermos os demais:

Mes

Faturamento

Custo

Lucro

2008-10-01 00:00:00

1070,00

600,00

470,00

2008-11-01 00:00:00

1630,00

1020,00

610,00

2008-12-01 00:00:00

2200,00

1180,00

1020,00

2009-01-01 00:00:00

1830,00

1290,00

540,00

O próximo passo é calcular a margem de lucro, ou seja a divisão do lucro apurado sobre o custo. Poderíamos evoluir a consulta anterior repetindo-se a coluna do lucro e do custo e dividir uma pela outra. Em todo caso, não acho essa uma alternativa uma boa prática. Repetir o código aumenta a necessidade de mantê-lo. Utilizarei uma CTE para realizar esse cálculo.

;WITH Resultado As (
SELECT DATEADD(D,1-Day(Data),Data) As Mes,
    Sum(CASE Tipo WHEN ‘C’ THEN Valor ELSE 0 END) As Faturamento,
    Sum(CASE Tipo WHEN ‘D’ THEN Valor ELSE 0 END) As Custo,
    Sum(CASE Tipo WHEN ‘C’ THEN Valor ELSE – Valor END) As Lucro
FROM Lancamentos
GROUP BY DATEADD(D,1-Day(Data),Data))

SELECT
    Mes, Faturamento, Custo, Lucro,
    Lucro / Custo As MargemLucro
FROM Resultado

Nesse caso, podemos verificar as margens de lucro (excepcionais para uma organização real, mas excelentes para um mero exemplo)

Mes

Faturamento

Custo

Lucro

MargemLucro

2008-10-01 00:00:00

1070,00

600,00

470,00

0,7833

2008-11-01 00:00:00

1630,00

1020,00

610,00

0,5980

2008-12-01 00:00:00

2200,00

1180,00

1020,00

0,8644

2009-01-01 00:00:00

1830,00

1290,00

540,00

0,4186

Antes de propriamente apurar a rentabilidade, é preciso lembrar uma certa premissa que foi feita anteriormente. Adotamos que a data a ser exibida para que a cláusula GROUP BY pudesse ser apurada fosse o primeiro dia do mês. Esse artifício foi necessário, pois, os lançamentos estavam em diversos dias do mês. De fato as consultas foram viabilizadas, mas devemos lembrar que as apurações do lucro são feitas ao final do mês e não no início. Assim sendo, precisamos adiantar um mês das datas de referência. Poderíamos ter feito isso anteriormente, mas a explicação ficaria um pouco mais complexa. A consulta abaixo incrementa a anterior e faz a apuração corretamente.

;WITH Resultado As (
SELECT DATEADD(D,1-Day(Data),Data) As Mes,
    Sum(CASE Tipo WHEN ‘C’ THEN Valor ELSE 0 END) As Faturamento,
    Sum(CASE Tipo WHEN ‘D’ THEN Valor ELSE 0 END) As Custo,
    Sum(CASE Tipo WHEN ‘C’ THEN Valor ELSE – Valor END) As Lucro
FROM Lancamentos
GROUP BY DATEADD(D,1-Day(Data),Data)),

ResultadoApurado (Mes, Faturamento, Custo, Lucro, MargemLucro)
As (
SELECT
    DATEADD(M,1,Mes), Faturamento, Custo, Lucro,
    Lucro / Custo As MargemLucro
FROM Resultado)

SELECT * FROM ResultadoApurado

Agora que a consulta está contabilmente mais correta já que apenas no primeiro dia do mês subseqüente é que "teoricamente" o lucro é conhecido podermos prosseguir. Para evitar encadear tantas CTEs e os scripts ficarem complexos, irei montar uma View com base na consulta para que possamos trabalhar os resultados em um formato intermediário.

CREATE VIEW vResultadoApurado
AS

WITH Resultado As (
SELECT DATEADD(D,1-Day(Data),Data) As Mes,
    Sum(CASE Tipo WHEN ‘C’ THEN Valor ELSE 0 END) As Faturamento,
    Sum(CASE Tipo WHEN ‘D’ THEN Valor ELSE 0 END) As Custo,
    Sum(CASE Tipo WHEN ‘C’ THEN Valor ELSE – Valor END) As Lucro
FROM Lancamentos
GROUP BY DATEADD(D,1-Day(Data),Data)),

ResultadoApurado (Mes, Faturamento, Custo, Lucro, MargemLucro)
As (
SELECT
    DATEADD(M,1,Mes), Faturamento, Custo, Lucro,
    Lucro / Custo As MargemLucro
FROM Resultado)

SELECT Mes, Faturamento, Custo, Lucro, MargemLucro
FROM ResultadoApurado

Um SELECT contra a VIEW retornará os cálculos diretamente e o período apurado

Mes

Faturamento

Custo

Lucro

MargemLucro

2008-11-01 00:00:00

1070,00

600,00

470,00

0,7833

2008-12-01 00:00:00

1630,00

1020,00

610,00

0,5980

2009-01-01 00:00:00

2200,00

1180,00

1020,00

0,8644

2009-02-01 00:00:00

1830,00

1290,00

540,00

0,4186

A idéia natural seria adicionar o valor de avaliação da empresa conforme a consulta abaixo:

DECLARE @ValorInicial SMALLMONEY
SET @ValorInicial = 15000

SELECT
    Mes, Faturamento, Custo, Lucro,
    @ValorInicial + Lucro As ValorEmpresa
FROM vResultadoApurado

O resultado produzido segue abaixo:

Mes

Faturamento

Custo

Lucro

ValorEmpresa

2008-11-01 00:00:00

1070,00

600,00

470,00

15470,00

2008-12-01 00:00:00

1630,00

1020,00

610,00

15610,00

2009-01-01 00:00:00

2200,00

1180,00

1020,00

16020,00

2009-02-01 00:00:00

1830,00

1290,00

540,00

15540,00

Como o lucro obtido em um determinado período aumentou a valorização da empresa, a conta acima está incorreta. A empresa em 01/11/2008 de fato vale R$ 15.470,00 já que no início do mês de outubro quando iniciou suas atividades está avaliada em R$ 15 mil e durante o mês obteve o lucro de R$ 470,00 sendo avaliada portanto ao final do período em R$ 15.470,00. Todavia no início de dezembro, a empresa deveria ser avaliada em R$ 16.080,00. Essa cifra é o valor da empresa no início de novembro (R$ 15.470,00) e o lucro do mês (R$ 610,00) e não apenas o valor original (R$ 15 mil) e o lucro de R$ 610,00. Para que a conta fique correta é necessário "acumular" o lucro ao longo dos meses. Já demonstrei como realizar sumarizações dessa natureza em Dicas e Truques sobre Consultas Complexas no SQL Server. Não custa relembrar uma das possibilidades (estou repetindo a expressão do lucro calculado, mas foi para evitar mais uma CTE).

DECLARE @ValorInicial SMALLMONEY
SET @ValorInicial = 15000

SELECT
    Mes, Lucro,

    — Cálculo do Lucro Acumulado
    (SELECT SUM(Lucro) FROM vResultadoApurado As TInt
    WHERE TOut.Mes >= TInt.Mes) As LucroAcumulado,

    — Cálculo do Valor Atual da Empresa
    (SELECT SUM(Lucro) FROM vResultadoApurado As TInt
    WHERE TOut.Mes >= TInt.Mes) + @ValorInicial As ValorAtual

FROM vResultadoApurado As TOut

O resultado obtido agora está correto, podemos ver que o valor do lucro é acumulado e a cada mês passa a ser contabilizado no valor da empresa

Mes

Lucro

LucroAcumulado

ValorAtual

2008-10-01 00:00:00

470,00

600,00

15470,00

2008-11-01 00:00:00

610,00

1080,00

16080,00

2008-12-01 00:00:00

1020,00

2100,00

17100,00

2009-01-01 00:00:00

540,00

2640,00

17640,00

Agora que o valor da empresa tenha sido estipulado, basta fazer a comparação do valor atual com o valor anterior. Há várias formas de calcular o valor anterior (uma subquery seria a escolha óbvia), mas deixando a SQL de lado, exemplificarei apenas uma lógica matemática. O valor anterior será exatamente igual ao valor atual subtraindo-se o lucro do período (mais uma CTE).

DECLARE @ValorInicial SMALLMONEY
SET @ValorInicial = 15000

;WITH Valorizacao As (
SELECT
    Mes, Lucro,

    (SELECT SUM(Lucro) FROM vResultadoApurado As TInt
    WHERE TOut.Mes >= TInt.Mes) As LucroAcumulado,

    (SELECT SUM(Lucro) FROM vResultadoApurado As TInt
    WHERE TOut.Mes >= TInt.Mes) + @ValorInicial As ValorAtual

FROM vResultadoApurado As TOut)

SELECT
    Mes, Lucro, LucroAcumulado,
    ValorAtual – Lucro As ValorAnterior, ValorAtual   
FROM Valorizacao

O resultado com os valores é obtido:

Mes

Lucro

LucroAcumulado

ValorAnterior

Valor Atual

2008-11-01 00:00:00

470,00

600,00

15000,00

15470,00

2008-12-01 00:00:00

610,00

1080,00

15470,00

16080,00

2009-01-01 00:00:00

1020,00

2100,00

16080,00

17100,00

2009-02-01 00:00:00

540,00

2640,00

17100,00

17640,00

Como a consulta retorna exatamente o valor atual e o valor anterior, basta agora fazer a divisão para calcular a rentabilidade.

DECLARE @ValorInicial SMALLMONEY
SET @ValorInicial = 15000

;WITH Valorizacao As (
SELECT
    Mes, Lucro,
    (SELECT SUM(Lucro) FROM vResultadoApurado As TInt
    WHERE TOut.Mes >= TInt.Mes) As LucroAcumulado,
    (SELECT SUM(Lucro) FROM vResultadoApurado As TInt
    WHERE TOut.Mes >= TInt.Mes) + @ValorInicial As ValorAtual

FROM vResultadoApurado As TOut),

Apuracao As (
SELECT
    Mes, Lucro, LucroAcumulado, ValorAtual,
    ValorAtual – Lucro As ValorAnterior
FROM Valorizacao)

SELECT
    Mes, Lucro, LucroAcumulado, ValorAnterior,
    (ValorAtual – ValorAnterior) / ValorAnterior As Rentabilidade
FROM Apuracao

A rentabilidade é uma comparação da situação atual com a situação anterior. Para saber realmente o que melhorou, temos que considerar somente a diferença entre a situação atual sobre a situação anterior (que é a melhora) e dividí-la pela situação anterior para obtermos a melhora em termos absolutos. Para quem desejar obter todas as métricas, segue a solução sem a View e apenas com CTEs.

DECLARE @ValorInicial SMALLMONEY
SET @ValorInicial = 15000

;WITH Resultado As (
SELECT DATEADD(D,1-Day(Data),Data) As Mes,
    Sum(CASE Tipo WHEN ‘C’ THEN Valor ELSE 0 END) As Faturamento,
    Sum(CASE Tipo WHEN ‘D’ THEN Valor ELSE 0 END) As Custo,
    Sum(CASE Tipo WHEN ‘C’ THEN Valor ELSE – Valor END) As Lucro
FROM Lancamentos
GROUP BY DATEADD(D,1-Day(Data),Data)),

ResultadoApurado (Mes, Faturamento, Custo, Lucro, MargemLucro)
As (
SELECT
    DATEADD(M,1,Mes), Faturamento, Custo, Lucro,
    Lucro / Custo As MargemLucro
FROM Resultado),

Valorizacao As (
SELECT
    Mes, Faturamento, Custo, MargemLucro, Lucro,
    (SELECT Sum(Lucro) FROM vResultadoApurado As TInt
    WHERE TOut.Mes >= TInt.Mes) As LucroAcumulado,
    (SELECT Sum(Lucro) FROM vResultadoApurado As TInt
    WHERE TOut.Mes >= TInt.Mes) + @ValorInicial As ValorAtual

FROM vResultadoApurado As TOut),

Apuracao As (
SELECT
    CONVERT(CHAR(10),Mes,103) As Mes, Faturamento, Custo,
    MargemLucro, Lucro, LucroAcumulado, ValorAtual,
    ValorAtual – Lucro As ValorAnterior
FROM Valorizacao)

SELECT
    Mes, Faturamento, Custo, MargemLucro, Lucro, ValorAtual,
    (ValorAtual – ValorAnterior) / ValorAnterior As Rentabilidade
FROM Apuracao

O resultado final é expresso na tabela abaixo:

Mes

Faturamento

Custo

MargemLucro

Lucro

ValorEmpresa

Rentabilidade

01/11/2008

1070,00

600,00

0,7833

470,00

15470,00

0,0313

01/12/2008

1630,00

1020,00

0,5980

610,00

15610,00

0,0394

01/01/2009

2200,00

1180,00

0,8644

1020,00

16020,00

0,0634

01/02/2009

1830,00

1290,00

0,4186

540,00

15540,00

0,0315

É impressionante como contas simples podem tornar as consultas SQL um pouco mais complexas. Às vezes pode ficar difícil tentar explicar para o contador, o gerente financeiro ou o dono da organização porque o Excel pode tornar os cálculos tão mais simples que a poderosa SQL e seus bancos de dados. Bem, a SQL certamente foi feita para manusear muito mais dados do que uma planilha jamais foi capaz e com os recursos de CTE e um pouco de lógica, as consultas SQL não são tão complexas quanto parecem.

Nesse exemplo, não introduzi situações de prejuízo (o que ia demandar um pouco mais de código). Deixo essa tarefa para os fuçadores (basta substituir o lançamento 5 de 560 credor para 560 devedor). Embora o título fale sobre o mercado de ações, sequer entramos nos títulos de verdade. Esse foi apenas um aquecimento. Há mais ainda por vir.

[ ]s,

Gustavo

3 Respostas para “Cálculos financeiros, consultas SQL e o mercado de ações – Parte I

  1. Parabéns pelo artigo, eu sou iniciante em banco de dados, e seu poste vai me servir para como material de apoio aos meus estudos.O brigado por me responder no fórum.Flaviano(Lutator)

  2. Olá amigo, muito legal seu artigo, gostaria de saber como faço para conseguir realizar cálculos com valores da linha anterior.Estou procurando mas não acho, tipo o valor que quero, é da coluna 1 + o valor da coluna 2 na linha anterior.Desde já muito obrigado.

  3. Olá Filipe,Eu já postei como fazer isso em várias oportunidades. Dê uma pesquisada no link abaixo:Dicas e Truques sobre consultas complexas no SQL Serverhttp://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!162.entry[ ]s,Gustavo

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s