none
melhorar procedure RRS feed

  • Pergunta

  • Olá pessoal estou com a seguinte procedure:
    CREATE     PROCEDURE up_ListarDeclaracaoServicoPrestado
    @idusuario as bigint
    as
    SELECT     d.idDeclaracaoIss, d.idUsuarioDMI, d.mmMesDeclaracao, d.aaAnoDeclaracao, d.stDeclaracao,
                      d.dtAbertura, d.stMovimento, d.numRetificadora, d.dtEncerramento, d.txtMotivoDeducaoImposto, d.IssAntecipado,
                      D.vlrDeducaoImposto
    FROM         dbo.dm_DeclaracaoISS d
    INNER JOIN  (select max (convert (datetime,('01' + '/' + convert(varchar,d.mmMesDeclaracao)+ '/' + convert(varchar,d.aaAnoDeclaracao))) )as data
                 FROM dm_DeclaracaoISS d   WHERE      idUsuarioDmi = @idusuario)
                 tbl ON
                 d.mmMesDeclaracao = DATEPART(MONTH, tbl.data) AND
                 d.aaAnoDeclaracao = DATEPART(Year, tbl.data)
    WHERE     (d.idUsuarioDMI = @idusuario) and (stDeclaracao ='A' or  stDeclaracao ='E')
    o problema é que eu deveria trazer dados do ultimo mes e ano existentes. Por exemplo: 12/2007 ou 01/2008 só que não está funcionando exatamente assim, alguém poderia me ajudar???
    grata
    segunda-feira, 7 de janeiro de 2008 14:52

Respostas

  • é o oposto:

     

    CREATE     PROCEDURE up_ListarDeclaracaoServicoPrestado
    @idusuario as bigint
    as
    SELECT     d.idDeclaracaoIss, d.idUsuarioDMI, d.mmMesDeclaracao, d.aaAnoDeclaracao, d.stDeclaracao,
                      d.dtAbertura, d.stMovimento, d.numRetificadora, d.dtEncerramento, d.txtMotivoDeducaoImposto, d.IssAntecipado,
                      D.vlrDeducaoImposto
    FROM         dbo.dm_DeclaracaoISS d
    INNER JOIN  (select max (convert (datetime,('01' + '/' + convert(varchar,d.mmMesDeclaracao)+ '/' + convert(varchar,d.aaAnoDeclaracao))) )as data
                 FROM dm_DeclaracaoISS d   WHERE      idUsuarioDmi = @idusuario)
                 tbl ON
                  tbl.mmMesDeclaracao = month(d.data) AND 
                  tbl.aaAnoDeclaracao = year(d.data)
    WHERE     (d.idUsuarioDMI = @idusuario) and (stDeclaracao ='A' or  stDeclaracao ='E')
    segunda-feira, 7 de janeiro de 2008 17:34

Todas as Respostas

  •  

    para pegar o ultimo mes/ano registrado o melhor e colocar em uma variavel primeiro exemplo:

     


    /*
    Create Table #Exemplo (data datetime)
    insert into #Exemplo (data) Values ('2001-10-12')
    insert into #Exemplo (data) Values ('2003-12-12')
    insert into #Exemplo (data) Values ('2007-01-12')
    insert into #Exemplo (data) Values ('2007-01-15')
    insert into #Exemplo (data) Values ('2007-01-16')
    insert into #Exemplo (data) Values ('2007-01-17')
    insert into #Exemplo (data) Values ('2004-12-01')
    insert into #Exemplo (data) Values ('2004-12-01')

    */

    Declare @DataStart Datetime
    Declare @DataEnd Datetime

    select @DataStart = Convert(Char(08),Max(Data),126) + '01' From #Exemplo


    Select * from #Exemplo where data between @DataStart and DateAdd(Day,-1,DateAdd(Month,1,@DataStart))

     

    Abs;

     

     

    segunda-feira, 7 de janeiro de 2008 15:00
  • Olá Marcelo! Não entendi muito bem sua resposta, mas o que eu quero são os dados do 'ultimo registro' - vamos dizer assim...
    eu que pegar o ultimo mes e o ultimo ano que seja registrado de um determinado usuário
    por exemplo:
    usuario id38, teve registro no mes 12 ano 2007
    e usuario id 40 teve 2 registros no mes 12 ano 2007 e mes 01 ano 2008
    no caso do usuario 40 só vou pegar mes 01 de 2008 e no anterior como só tem um registro mes 12/ 2007.
    segunda-feira, 7 de janeiro de 2008 17:08
  • é o oposto:

     

    CREATE     PROCEDURE up_ListarDeclaracaoServicoPrestado
    @idusuario as bigint
    as
    SELECT     d.idDeclaracaoIss, d.idUsuarioDMI, d.mmMesDeclaracao, d.aaAnoDeclaracao, d.stDeclaracao,
                      d.dtAbertura, d.stMovimento, d.numRetificadora, d.dtEncerramento, d.txtMotivoDeducaoImposto, d.IssAntecipado,
                      D.vlrDeducaoImposto
    FROM         dbo.dm_DeclaracaoISS d
    INNER JOIN  (select max (convert (datetime,('01' + '/' + convert(varchar,d.mmMesDeclaracao)+ '/' + convert(varchar,d.aaAnoDeclaracao))) )as data
                 FROM dm_DeclaracaoISS d   WHERE      idUsuarioDmi = @idusuario)
                 tbl ON
                  tbl.mmMesDeclaracao = month(d.data) AND 
                  tbl.aaAnoDeclaracao = year(d.data)
    WHERE     (d.idUsuarioDMI = @idusuario) and (stDeclaracao ='A' or  stDeclaracao ='E')
    segunda-feira, 7 de janeiro de 2008 17:34