Usuário com melhor resposta
Trazer último registro.

Pergunta
-
Transacao DOCUMENTO OBJETO ID Data de Aprovação EINKBELEG 4501155532 88311309 40042124 10.10.2011 09:17:44 EINKBELEG 4501155532 88311490 40042124 10.10.2011 09:19:35 EINKBELEG 4501155532 99039607 40042124 28.12.2011 06:28:29 EINKBELEG 4501155532 100739963 40042124 06.01.2012 05:40:36 EINKBELEG 4501155532 100739989 40042124 06.01.2012 05:41:09 EINKBELEG 4501155532 100743996 20202868 06.01.2012 06:16:59 EINKBELEG 4501155532 100751023 40123556 06.01.2012 08:11:32
Boa Tarde a todos,
Estou com uma dúvida para efetuar uma query.
Na tabela acima eu tenho as aprovações dos documentos de compra da empresa.
Cada documento passa por uma rota de aprovação e termina com um aprovador final (no caso acima 40123556 no dia 06/01 as 08:11.
Pergunta existe uma forma de eu selecionar somente os documentos com seu último aprovador?
ou seja, vou ter diversos documentos, porém vou trazer somente a última aprovação feita.
Obrigado
Erick Egea
Respostas
-
Boa tarde,
Experimente mais ou menos desta forma:
with CTE_N as ( select Transacao, Documento, Objeto, ID, DataAprovacao, ROW_NUMBER() OVER(PARTITION BY Documento ORDER BY DataAprovacao DESC) as RowNum from Tabela ) select * from CTE_N where RowNum = 1
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 6 de fevereiro de 2013 15:51
- Marcado como Resposta Ricardo Russo quarta-feira, 27 de fevereiro de 2013 12:47
-
Erick, voce pode pegar a ultima data conforme abaixo, mas se voce precisar do ObjetoID para cada
objeto ele retornaria uma linha, veja se te atende:
select Transacao, Documento, Max([Data de aprovacao] from Tabela group by Transacao, Documento
Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 6 de fevereiro de 2013 15:52
- Marcado como Resposta Ricardo Russo quarta-feira, 27 de fevereiro de 2013 12:47
Todas as Respostas
-
Boa tarde,
Experimente mais ou menos desta forma:
with CTE_N as ( select Transacao, Documento, Objeto, ID, DataAprovacao, ROW_NUMBER() OVER(PARTITION BY Documento ORDER BY DataAprovacao DESC) as RowNum from Tabela ) select * from CTE_N where RowNum = 1
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 6 de fevereiro de 2013 15:51
- Marcado como Resposta Ricardo Russo quarta-feira, 27 de fevereiro de 2013 12:47
-
Erick, voce pode pegar a ultima data conforme abaixo, mas se voce precisar do ObjetoID para cada
objeto ele retornaria uma linha, veja se te atende:
select Transacao, Documento, Max([Data de aprovacao] from Tabela group by Transacao, Documento
Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 6 de fevereiro de 2013 15:52
- Marcado como Resposta Ricardo Russo quarta-feira, 27 de fevereiro de 2013 12:47
-
Erick, voce pode pegar a ultima data conforme abaixo, mas se voce precisar do ObjetoID para cada
objeto ele retornaria uma linha, veja se te atende:
select Transacao, Documento, Max([Data de aprovacao] from Tabela group by Transacao, Documento
Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
Boa Tarde Alexandre,
Exatamente, eu vou precisar do ID para cada documento. Ou seja, preciso saber o último cara que aprovou. Dessa forma eu não consigo trazer, certo?
Erick Egea
-
Boa tarde,
Experimente mais ou menos desta forma:
with CTE_N as ( select Transacao, Documento, Objeto, ID, DataAprovacao, ROW_NUMBER() OVER(PARTITION BY Documento ORDER BY DataAprovacao DESC) as RowNum from Tabela ) select * from CTE_N where RowNum = 1
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
Desculpe me a ignorância (Sou iniciante total em SQL), o que seria o CTE_N ?
Obrigado
Erick Egea
-
Hoje minha tabela está dessa forma:
OBJECTCLAS OBJECTID CHANGENR USERNAME UDATE UTIME EINKBELEG 4501292754 100498693 40166084 20120104 102633 EINKBELEG 4501292829 100235032 40166084 20120102 65920 EINKBELEG 4501293429 100227831 40172867 20120102 44210 EINKBELEG 4501294104 100629405 40123556 20120105 80645 EINKBELEG 4501294111 100629389 40123556 20120105 80641 EINKBELEG 4501294360 100271611 20201998 20120102 155438 EINKBELEG 4501294428 100526357 40123556 20120104 152619 EINKBELEG 4501295420 100188515 20200968 20120102 40128 EINKBELEG 4501295659 100526946 40123556 20120104 152756 EINKBELEG 4501295694 100498399 40166084 20120104 102121 EINKBELEG 4501295712 100735652 40172867 20120106 043944 EINKBELEG 4501295712 101233150 40172777 20120110 104303 Alguns documentos vão aparecer repetidos, por exemplo: 4501295712 o usuário (40172867) aprovou ele no dia 06/01/2012 às 4:39 e depois o outro usuário 40172777 aprovou dia 10/01/2012 às 10:43....
ou seja quando eu fizer o select, ele vai me trazer somente o documento com o último aprovador.
Erick Egea
-
Sobre CTE confira as páginas abaixo:
http://msdn.microsoft.com/en-us/library/ms190766.aspx
http://www.codeproject.com/Articles/265371/Common-Table-Expressions-CTE-in-SQL-SERVER-2008
A query que sugeri ficaria desta forma com a sua tabela:
with CTE_N as ( select ObjectClas, ObjectId, ChangeNr, UserName, UDate, UTime, ROW_NUMBER() OVER(PARTITION BY ObjectId ORDER BY UDate DESC, UTime DESC) as RowNum from Tabela ) select * from CTE_N where RowNum = 1
Espero que ajude.Assinatura: http://www.imoveisemexposicao.com.br