Usuário com melhor resposta
melhorar procedure

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
Respostas
-
é o oposto:
@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')
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 Datetimeselect @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;
-
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. -
é o oposto:
@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')