Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Boa Tarde,
Estou tentando fazer algo no QlikView há algum tempo e estou tendo dificuldade. Tenho a 'Tabela 1' onde preciso descobrir a coluna estado de cada linha utilizando a tabela 2.
Só que quero que ela pegue o estado onde a coluna 'Número' da Tabela 1 é igual a 'Numero' da tabela 2 e que ele pegue a maior Data da tabela 2 que é menor que a da Tabela 1.
Algo como max(Data Inicio(2)) Where Data Inicio(2)<Data Inicio(1).
Segue um exemplo:
Tabela 1:
Numero Data Inicio(1)
1 16/08/2016
1 21/08/2016
1 26/08/2016
2 07/08/2016
2 22/08/2016
3 07/08/2016
3 09/08/2016
Tabela 2:
Numero Data Inicio(2) Estado
1 10/08/2016 A
1 14/08/2016 B
1 20/08/2016 D
1 28/08/2016 B
2 05/08/2016 C
2 10/08/2016 C
2 20/08/2016 B
3 04/08/2016 A
3 06/08/2016 A
3 14/08/2016 B
3 28/08/2016 C
Tabela Final:
Numero Data Inicio Estado
1 16/08/2016 B
1 21/08/2016 D
1 26/08/2016 D
2 07/08/2016 C
2 22/08/2016 B
3 07/08/2016 A
3 09/08/2016 A
Obrigado,
Vinicius.
segue script...
Tabela:
LOAD * INLINE [
Numero, DataInicio1
1 , 16/08/2016
1 , 21/08/2016
1 , 26/08/2016
2 , 07/08/2016
2 , 22/08/2016
3 , 07/08/2016
3 , 09/08/2016
];
join (Tabela)
LOAD * INLINE [
Numero ,DataInicio2,Estado
1 ,10/08/2016 , A
1 ,14/08/2016 , B
1 ,20/08/2016 , D
1 ,28/08/2016 , B
2 ,05/08/2016 , C
2 ,10/08/2016 , C
2 ,20/08/2016 , B
3 ,04/08/2016 , A
3 ,06/08/2016 , A
3 ,14/08/2016 , B
3 ,28/08/2016 , C
];
left join (Tabela)
LOAD
Numero,
DataInicio1,
max(DataInicio2) as MaiorData
Resident Tabela
Where DataInicio2 < DataInicio1
Group by Numero, DataInicio1;
TabelaFinal:
NoConcatenate
LOAD
Numero,
DataInicio1,
DataInicio2,
Estado
Resident Tabela Where MaiorData = DataInicio2;
//
DROP Table Tabela;
eu faria algo tipo assim (talvez a etapa "tab3" e "tab_final" de pra fazer no mesmo load, mas como não tenho certeza, deixei separado... e na hora do max() fique atento ao formato de data que vai sair o resultado, pro left join seguinte dar certo as datas precisam estar no mesmo formato) :
tab1:
load
Numero,
Data_1
from [ tab 1 ];
left joint (tab1)
load
Numero,
Data_2
from [ tab 2 ];
tab3:
Noconcatenate
load
Numero,
Data_1,
Data_2
resident tab1 where Data_1 > Data_2 ;
drop table tab1;
tab_final:
load
Numero
Data_1
max(Data_2) as Data_tmp
resident tab3 group by Numero, Data_1;
drop table tab3;
left join (tab_final)
load
Numero,
Data_2 as Data_tmp,
Estado
from [ tab 2 ];
drop field Data_tmp;
Vinicius,
segue modelo...
segue script...
Tabela:
LOAD * INLINE [
Numero, DataInicio1
1 , 16/08/2016
1 , 21/08/2016
1 , 26/08/2016
2 , 07/08/2016
2 , 22/08/2016
3 , 07/08/2016
3 , 09/08/2016
];
join (Tabela)
LOAD * INLINE [
Numero ,DataInicio2,Estado
1 ,10/08/2016 , A
1 ,14/08/2016 , B
1 ,20/08/2016 , D
1 ,28/08/2016 , B
2 ,05/08/2016 , C
2 ,10/08/2016 , C
2 ,20/08/2016 , B
3 ,04/08/2016 , A
3 ,06/08/2016 , A
3 ,14/08/2016 , B
3 ,28/08/2016 , C
];
left join (Tabela)
LOAD
Numero,
DataInicio1,
max(DataInicio2) as MaiorData
Resident Tabela
Where DataInicio2 < DataInicio1
Group by Numero, DataInicio1;
TabelaFinal:
NoConcatenate
LOAD
Numero,
DataInicio1,
DataInicio2,
Estado
Resident Tabela Where MaiorData = DataInicio2;
//
DROP Table Tabela;
Muito obrigado, atendeu perfeitamente!