Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
viniciusroteli
Contributor III
Contributor III

Pegar última Data e anterior a ela !!

Bom Dia !!!

Tenho uma Tabela onde tenho Item e Vigência dele, e existem várias vigências para cada item preciso identificar a última vigência e a anterior a ela.

Exemplo:   

ItemUnidadeVigência Und
157422ML01/02/2016
157422ML01/04/2016
157422UND01/06/2016
157422ML01/09/2016

pois preciso saber quais itens mudaram a "Unidade" da última vigência pra anterior.

Ou armazenar a última unidade e a anterior para comparação,

o Peek pega o UND e o ML também que é anterior a UND, só preciso da Anterior a Última.

Desde já agradeço.

8 Replies
fabionakashigue
Partner - Creator
Partner - Creator

Cara aqui está o script para a maxima data e anterior.

Da parte da unidade não entendi muito bem do que precisa.

Teste:

LOAD * INLINE [

    Item, Unidade, Vigência Und

    157422, ML, 01/02/2016

    157422, ML, 01/04/2016

    157422, UND, 01/06/2016

    157422, ML, 01/09/2016

];

NoConcatenate

Tmp:

Load Item, Unidade, Date(Floor([Vigência Und]),'DD/MM/YYYY') As Vigencia

Resident Teste;

Drop table Teste;

PegaMax:

Load

Item,

Max(Vigencia) As Maxima,

Max(Vigencia,2) As MaximaAnt

Resident Tmp Group by Item;

viniciusroteli
Contributor III
Contributor III
Author

Fábio,

Você pegou as duas datas a última e a anterior nos campos Maxima e MaximaAnt preciso de alguma forma sinalizar essas datas, pois em uma tabela precisarei demonstrar qual mudou a unidade.

Exemplo:

A unidade do produto na Vigência "Maxima" for diferente da Unidade do Produto na Vigencia "MaximaAnt", sinalizo com uma mensagem.

    

ItemUnidadeVigência UndAlt.Uni
157422ML01/02/2016
157422ML01/04/2016
157422UND01/06/2016
157422ML01/09/2016Sim

Um Campo Flag sinalizando os casos que tiveram alteração de unidade, da última vigência com relação a anterior.

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Vinicius,

creio que podes usar

firstsortedvalue (Item, [Vigência Und])      para menor

firstsortedvalue (Item, [Vigência Und], 2)   para anterior



furtado@farolbi.com.br
viniciusroteli
Contributor III
Contributor III
Author

Ele retorna ML nas duas expressões.

Eu só preciso de alguma forma sinalizar a mudança de unidade e demonstrar que na vigência 01/09/2016 teve mudança de Unidade.

paulovendruscol
Creator
Creator

Veja se é isso que vc precisa:

Teste_TMP:

LOAD * INLINE [

    Item, Unidade, VigenciaUnd

    157422, ML, 01/02/2016

    157422, ML, 01/04/2016

    157421, UND, 01/06/2016

    157421, ML, 01/09/2016

    157422, UND, 01/06/2016

    157422, ML, 01/09/2016

    157423, UND, 01/06/2016

    157423, ML, 01/09/2016

];

NoConcatenate

Teste:

LOAD

Item,

Unidade,

VigenciaUnd,

if(Item = Peek(Item) AND Unidade = Peek(Unidade,-2),'SIM','NÂO') as NOVO

Resident Teste_TMP;

DROP Table Teste_TMP

Anonymous
Not applicable

Prezado Paulo,

Seu Script está excelente mas gostaria de fazer uma observação, por gentileza me corrija se eu estiver enganado:

Para que a função "Peek" funcione corretamente a tabela tem que ser carregada em ordem cronológica não é mesmo? Tipo: Se algum dia o responsável pela alimentação desses dados esquecer de alimentar, quando ele for colocar as informações em dia, ele deverá ficar atento para adicionar os valores na ordem cronológica em que eles ocorreram. Caso contrário o resultado do Script poderá ficar incorreto. Se pudermos contornar esse problema será melhor.

Vou tentar  com o Set Analysis numa tabela. Se eu conseguir posto aqui.

Parabéns Paulo.

mauroponte
Creator II
Creator II

Wellington,

Se no script do Paulo ele der um order by pelo item e data de vigencia nao resolve a questão que voce sitou?

Anonymous
Not applicable

Pelos testes que fiz aqui resolve sim Mauro.

Estou aproveitando esse questionamento para tentar descobrir outras alternativas para demandas como essa.