Compare dados na mesma tabela

Eu tenho uma tabela que armazena os dados mensais e gostaria de criar uma comparação entre a quantidade de movimento dentro de um período.

Aqui está um exemplo de tabela

a table with a client that can have one or more policies and each policy can have one or more funds. This is a one-to-many relationship.

A instrução SQL a seguir visam devolver quaisquer mudanças que tem acontecido dentro de um período qualquer do fundo/política de perda total ou parcial, bem como total ou parcial, ou de ganho. Eu tenho lutado com ele por um tempo - qualquer ajuda seria bem apreciado.

Atualmente tenho 5 conjuntos de sindicatos - (onde as políticas e fundos de correspondência e há uma diferença em quantidades realizada, onde a existência de políticas no anterior e não na corrente e vice-versa, e que os valores mobiliários de existir no anterior e não na corrente e vice-versa), mas outros sindicatos trabalho de salvar para o último par (em que os valores mobiliários existe no anterior e não na corrente e vice-versa). Não parece retornar a cada ocorrência.

 SELECT distinct pc.[Client]
      ,pc.Policy
      ,cast(pc.Qty as decimal) AS CurrQ
      ,0 AS PrevQ
      ,cast(pc.Qty as decimal) - 0 AS QtyDiff
      ,CASE WHEN cast(pc.Qty as decimal) - 0 > 0 THEN 'Bought Units'
            WHEN cast(pc.Qty as decimal) - 0 < 0 THEN 'Sold Units'
          ELSE 'Unknown'
       END AS TransactionType
       ,convert(varchar,cast(pc.[ValDate] as date),103) AS CurrValDate
       ,'' AS PrevValDate
  FROM table pc
  WHERE convert(varchar,cast(pc.[ValDate] as date),103) = convert(varchar,getdate(),103)
  AND pc.Policy IN (SELECT policy
                    FROM table
                    WHERE convert(varchar(10),[ValDate],103) = convert(varchar(10),getdate()-1,103)

  AND pc.[Fund] NOT IN (SELECT PM.[Fund]
                        FROM table pc
                        LEFT JOIN table pm ON pc.policy = pm.policy
                        WHERE convert(varchar,cast(pc.[ValDate] as date),103) = convert(varchar,getdate(),103))
                        AND convert(varchar,cast(pm.[ValDate] as date),103) = convert(varchar,getdate()-1,103))

omits the fghij fund (that didn't exist previously on the same policy) and pqrst that existed but was fully sold - see the highlighted rows.)

0
2019-09-17 11:51:01
origem
0 respostas

Veja mais perguntas por marcas